成都网站建设设计

将想法与焦点和您一起共享

PHP与Go语言之间的通信详解-创新互联

前言

创新互联公司执着的坚持网站建设,小程序设计;我们不会转行,已经持续稳定运营十余年。专业的技术,丰富的成功经验和创作思维,提供一站式互联网解决方案,以客户的口碑塑造品牌,携手广大客户,共同发展进步。

最近工作中遇到的一个场景,php项目中需要使用一个第三方的功能,而恰好有一个用Golang写好的类库。那么问题就来了,要如何实现不同语言之间的通信呢?下面就来一起看看吧。

常规的方案

    1、 用Golang写一个http/TCP服务,php通过http/TCP与Golang通信

     2、将Golang经过较多封装,做为php扩展。

     3、PHP通过系统命令,调取Golang的可执行文件

存在的问题

     1、http请求,网络I/O将会消耗大量时间

     2、需要封装大量代码

     3、PHP每调取一次Golang程序,就需要一次初始化,时间消耗很多

优化目标

     1、Golang程序只初始化一次(因为初始化很耗时)

     2、所有请求不需要走网络

     3、尽量不大量修改代码

解决方案

     1、简单的Golang封装,将第三方类库编译生成为一个可执行文件

     2、PHP与Golang通过双向管道通信

使用双向管道通信优势

     1:只需要对原有Golang类库进行很少的封装

     2:性能最佳 (IPC通信是进程间通信的最佳途径)

     3:不需要走网络请求,节约大量时间

     4:程序只需初始化一次,并一直保持在内存中

具体实现步骤

1:类库中的原始调取demo

  package main
  import (
   "fmt"
   "github.com/yanyiwu/gojieba"
   "strings"
  )

  func main() {
   x := gojieba.NewJieba()
   defer x.Free()

   s := "小明硕士毕业于中国科学院计算所,后在日本京都大学深造"
   words := x.CutForSearch(s, true)
   fmt.Println(strings.Join(words, "/"))
  }

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:PHP与Go语言之间的通信详解-创新互联
链接分享:http://chengdu.cdxwcx.cn/article/ephhe.html