Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP melaksanakan komunikasi dengan melalui JSON RPC (kod dilampirkan)

PHP melaksanakan komunikasi dengan melalui JSON RPC (kod dilampirkan)

藏色散人
藏色散人ke hadapan
2023-01-13 10:16:403995semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang php dan golang terutamanya memperkenalkan cara php berkomunikasi melalui JSON RPC. Saya harap ia dapat membantu rakan-rakan yang memerlukan.

PHP melaksanakan komunikasi dengan melalui JSON RPC (kod dilampirkan)

php berkomunikasi dengan golang melalui JSON RPC

Kaedah ini menyelesaikan keperluan pemprosesan PHP yang intensif secara pengiraan.

Saya tidak tahu mengapa ia tidak boleh diakses merentas pelayan Jika anda tahu, sila tinggalkan mesej.

pergi perkhidmatan

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

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

Pulangan keputusan

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

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci PHP melaksanakan komunikasi dengan melalui JSON RPC (kod dilampirkan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam