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

php 通过 JSON RPC 与 golang 通讯
此方法为解决php处理计算密集型需求。
不知道为啥,不能跨服务器访问,有知道的请留言。
go 服务
package main
import (
"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.B
case "-":
reply.Data = args.A - args.B
case "*":
reply.Data = args.A * args.B
case "/":
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)
}
}
登录后复制

