【RPC??004】python调用go rpc server
2021/9/11 20:35:11
本文主要是介绍【RPC??004】python调用go rpc server,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
rpc
- 基于上一节,对server进行修改它的序列化协议。
- 用go client调用,同样用json协议
- 用python调用go rpc server
想用其他语言调用go rpc server,就必须修改其他语言也支持的序列化协议,如json序列化协议
基于上一节,对server进行修改它的序列化协议。
package main import ( "net" "net/rpc" "net/rpc/jsonrpc" ) type HelloServer struct{} func (hello *HelloServer) Hello(request string, reply *string)error{ *reply = "hi " + request return nil } func main(){ // socket listener,_ := net.Listen("tcp",":1234") _ =rpc.RegisterName("HelloServer", &HelloServer{}) for{ //为了防止它退出,我们用for语句 循环处理 conn, _ := listener.Accept() // ServeCodec修改编码协议,唯一未改的地方 go rpc.ServeCodec(jsonrpc.NewServerCodec(conn)) // 支持高并发, } }
用go client调用,同样用json协议
package main import ( "fmt" "net" "net/rpc" "net/rpc/jsonrpc" ) func main(){ // 这里不再用rpc做连接,因为rpc内部会用Gob协议 conn, err := net.Dial("tcp","localhost:1234") if err != nil{ panic("connection failed") } var reply *string = new(string) // 这里指定序列化协议为json client := rpc.NewClientWithCodec(jsonrpc.NewClientCodec(conn)) err = client.Call("HelloServer.Hello", "books", reply) if err != nil{ panic("调用失败") } fmt.Println(*reply) }
用python调用go rpc server
调用 rpc server 只要知道上面json是以什么格式接受的就可以了,我们用python调用时遵守那种格式传输数据。
{
“id”: 0,
“params”: [“book”],
“method”: “HelloServer.Hello”
}
import socket import json request = { "id": 0, "params": ["book"], "method": "HelloServer.Hello" } client = socket.create_connection(("localhost", 1234),5) client.sendall(json.dumps(request).encode()) rsp = client.recv(1024) rsp = json.loads(rsp.decode()) print(rsp)
这篇关于【RPC??004】python调用go rpc server的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型