惯例的筹划:
- 用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过程停止。
- 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, "/"))
- }
- package main
- import (
- "bufio"
- "fmt"
- "github.com/yanyiwu/gojieba"
- "io"
- "os"
- "strings"
- )
- func main() {
- x := gojieba.NewJieba(
- "/data/tmp/jiebaDict/jieba.dict.utf8",
- "/data/tmp/jiebaDict/hmm_model.utf8",
- "/data/tmp/jiebaDict/user.dict.utf8"
- )
推荐阅读
LSTM之父预测人工智能奇点或在2030年到来|GMIS2017 上的AI大佬都说了啥
5 月 27 日,由机械之心主办的为期两天的GMIS 2017 大年夜会在北京拉开帷幕。据悉,浩瀚来自瑞士、美国、加拿大年夜以及国内的浩瀚人工智能学术大年夜咖、业界大年夜牛都邑表态GMIS的舞台>>>详细阅读
本文标题:PHP与Golang如何通信?
地址:http://www.17bianji.com/lsqh/35483.html
1/2 1