>  기사  >  백엔드 개발  >  PHP는 JSON RPC(코드 첨부)를 통해 통신을 구현합니다.

PHP는 JSON RPC(코드 첨부)를 통해 통신을 구현합니다.

藏色散人
藏色散人앞으로
2023-01-13 10:16:403995검색

이 글은 PHP와 Golang에 대한 관련 지식을 제공합니다. 주로 JSON RPC를 통해 Go와 통신하는 방법을 소개합니다. 도움이 필요한 친구들에게 도움이 되기를 바랍니다.

PHP는 JSON RPC(코드 첨부)를 통해 통신을 구현합니다.

php는 JSON RPC

를 통해 golang과 통신합니다. 이 방법은 PHP 처리의 계산 집약적인 요구 사항을 해결합니다.

왜 서버간 접근이 안되는지 모르겠네요. 아시는 분은 메시지 남겨주세요.

go service

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 client

  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;
    }

Return results

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

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP는 JSON RPC(코드 첨부)를 통해 통신을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제