php实现通过JSON RPC与go通讯(附代码)

编程入门 行业动态 更新时间:2024-10-26 19:31:17

本篇文章给大家带来了关于php与golang的相关知识,其中主要介绍了php是怎么通过JSON RPC和go进行通讯的,下面一起来看一下,希望对需要的朋友有所帮助。

php 通过 JSON RPC 与 golang 通讯

此方法为解决php处理计算密集型需求。

不知道为啥,不能跨服务器访问,有知道的请留言。

go 服务

package mainimport ("fmt""log""net""net/rpc""net/rpc/jsonrpc") type Calc struct{} type Args struct {A float64 `json:"a"`B float64 `json:"b"`Op string `json:"op"`} type Reply struct {Msg string `json:"msg"`Data float64 `json:"data"`} // 第一个是参数是获取客户端传来的数据,第二个参数是返回的数据 func (c *Calc) Compute(args Args, reply *Reply) error {var (msg string = "ok") switch args.Op {case "+":reply.Data = args.A + args.Bcase "-":reply.Data = args.A - args.Bcase "*":reply.Data = args.A * args.Bcase "/":if args.B == 0 {msg = "in divide op, B can't be zero"} else {reply.Data = args.A / args.B}default:msg = fmt.Sprintf("unsupported op:%s", args.Op)}reply.Msg = msg if reply.Msg == "ok" {return nil}return fmt.Errorf(msg)} // 启动server端func main() {err := rpc.Register(new(Calc)) if err != nil {panic(err)} listener, err := net.Listen("tcp", "127.0.0.1:8181")if err != nil {panic(err)} for {conn, err := listener.Accept() if err != nil {log.Println(err)continue} go jsonrpc.ServeConn(conn)}}

php 客户端

public function Call($method, $params) { $this->conn = fsockopen('127.0.0.1', 8181, $errno, $errstr, 3); if (!$this->conn) { return false; } $err = fwrite($this->conn, json_encode(array( 'method' => $method, 'params' => array($params), 'id' => 12345, ))."\n"); if ($err === false) return false; stream_set_timeout($this->conn, 0, 3000); $line = fgets($this->conn); if ($line === false) { return NULL; } return json_decode($line,true); } public function Test() { //访问结构体 Calc 下 Compute 方法 $res = $this->Call("Calc.Compute",array('A'=>1,'B'=>2,'Op'=>'+')); return $res; }

返回结果

{ "id": 12345, "result": { "msg": "ok", "data": 3 }, "error": null}

  • 0
  • 0
  • 0
  • 0
  • 0

更多推荐

php实现通过JSON RPC与go通讯(附代码)

本文发布于:2023-05-22 18:56:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1326153.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!