您好,登錄后才能下訂單哦!
今天小編給大家分享一下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)
}
}
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如何通過JSON RPC與go通訊”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。