• 技术文章 >后端开发 >PHP问题

    php和golang怎么配合

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

    常规的方案 (推荐学习:PHP视频教程

    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, "/"))
    }

    保存文件为main.go,就可以运行

    2:调整后代码为:

    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"
     )
     defer x.Free()
     
     inputReader := bufio.NewReader(os.Stdin)
     for {
      s, err := inputReader.ReadString('\n')
      if err != nil && err == io.EOF {
       break
      }
      s = strings.TrimSpace(s)
     
      if s != "" {
       words := x.CutForSearch(s, true)
       fmt.Println(strings.Join(words, " "))
      } else {
       fmt.Println("get empty \n")
      }
     }
    }

    只需要简单的几行调整,即可实现:从标准输入接收字符串,经过分词再输出

    测试:

    # go build test
    # ./test
    # //等待用户输入,输入”这是一个测试“
    # 这是 一个 测试 //程序

    以上就是php和golang怎么配合的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php
    上一篇:linux中如何上传php网页 下一篇:jsp和php哪个好
    大前端线上培训班

    相关文章推荐

    • php支持哪8种数据类型?• php有队列概念吗• php支持哪些数据库?• html中可以写php吗

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网