您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/4/11 20:05:53发布20次查看
本篇文章给大家带来了关于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}
推荐学习:《php视频教程》
以上就是php实现通过json rpc与go通讯(附代码)的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product