Go语言rpc的server
package main
import (
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
type HelloService struct {
}
func (s *HelloService) Hello(request string, reply *string) error {
*reply = "Hello, " + request + " nice to meet you!"
return nil
}
func main() {
listener, _ := net.Listen("tcp", ":1234")
_ = rpc.RegisterName("HelloService", &HelloService{})
for {
conn, _ := listener.Accept()
go rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
}
}
客户端
go客户端
package main
import (
"fmt"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
func main() {
conn, err := net.Dial("tcp", "localhost:1234")
if err != nil {
panic(err)
panic("链接失败")
}
var reply string
client := rpc.NewClientWithCodec(jsonrpc.NewClientCodec(conn))
err = client.Call("HelloService.Hello", "lxy", &reply)
if err != nil {
panic(err)
panic("调用失败")
}
fmt.Println(reply)
}
python客户端
import json
import socket
request = {
"id":8,
"params":["lxy_py"],
"method":"HelloService.Hello"
}
address = ("localhost",1234)
timeout = 3
client = socket.create_connection(address, timeout)
client.sendall(json.dumps(request).encode())
rsp = client.recv(1024*2)
print(type(rsp))
rsp_str = json.loads(rsp)
print(rsp.decode())
print(rsp_str["result"])