作家
登录

PHP与Golang如何通信?

作者: 来源: 2017-05-29 14:39:02 阅读 我要评论

PHP与Golang若何通信?

惯例的筹划:

  • 用Golang写一个http/TCP办事,php经由过程http/TCP与Golang通信
  • 将Golang经由较多封装,做为php扩大。
  • PHP经由过程体系敕令,调取Golang的可履行文件

存在的问题:

  • http请求,收集I/O将会消费大年夜量时光
  • 须要封装大年夜量代码
  • PHP每调取一次Golang法度榜样,就须要一次初始化,时光消费很多

优化目标:

  • Golang法度榜样只初始化一次(因为初始化很耗时)
  • 所有请求不须要走收集
  • 尽量不大年夜量修改代码

解决筹划:

  • 简单的Golang封装,将第三方类库编译生成为一个可履行文件
  • PHP与Golang经由过程双向管道通信

应用双向管道通信优势:

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

2:机能最佳 (IPC通信是过程间通信的最佳门路)

3:不须要走收集请求,节约大年夜量时光

比来碰到的一个场景:php项目中须要应用一个第三方的功能(结巴分词),而github膳绫擎正好有一个用Golang写好的类库。那么问题就来了,要若何实现不合说话之间的通信呢?

4:法度榜样只需初始化一次,并一向保持在内存中

具体实现步调:

  • 1:类库中的原始调取demo

管道机制自身可解决此问题。管道供给两个接口:读、写。当写过程停止或者不测挂掉落时,读过程也会报错,以上Golang源代码中的err逻辑就会履行,Golang过程停止。

  1. package main 
  2. import ( 
  3.     "fmt" 
  4.     "github.com/yanyiwu/gojieba" 
  5.     "strings" 
  6.   
  7. func main() { 
  8.     x := gojieba.NewJieba() 
  9.     defer x.Free() 
  10.   
  11.     s := "小明硕士卒业于中国科学院计算所,后在日本京都大年夜学深造" 
  12.     words := x.CutForSearch(s, true
  13.     fmt.Println(strings.Join(words, "/")) 
  1. package main 
  2.   import ( 
  3.       "bufio" 
  4.       "fmt" 
  5.       "github.com/yanyiwu/gojieba" 
  6.       "io" 
  7.       "os" 
  8.       "strings" 
  9.   ) 
  10.   
  11.   func main() { 
  12.   
  13.       x := gojieba.NewJieba( 
  14.           "/data/tmp/jiebaDict/jieba.dict.utf8"
  15.           "/data/tmp/jiebaDict/hmm_model.utf8"
  16.           "/data/tmp/jiebaDict/user.dict.utf8" 
  17.       ) 
     1/4    1 2 3 4 下一页 尾页

      推荐阅读

      LSTM之父预测人工智能奇点或在2030年到来|GMIS2017 上的AI大佬都说了啥

    5 月 27 日,由机械之心主办的为期两天的GMIS 2017 大年夜会在北京拉开帷幕。据悉,浩瀚来自瑞士、美国、加拿大年夜以及国内的浩瀚人工智能学术大年夜咖、业界大年夜牛都邑表态GMIS的舞台>>>详细阅读


    本文标题:PHP与Golang如何通信?

    地址:http://www.17bianji.com/lsqh/35483.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)