rpc服务端
package main import ( "log" "net" "net/rpc" "net/rpc/jsonrpc" ) type HelloService struct { } func (p *HelloService) Hello(request string, reply *string) error { *reply = "Hello:" + request return nil } // 给予json 编码重新实现rpc func main() { rpc.RegisterName("HelloService", new(HelloService)) listener, err := net.Listen("tcp", ":6666") if err != nil { log.Fatal("listenTCP error:", err) } for { conn, err := listener.Accept() if err != nil { log.Fatal("accept error:", err) } go rpc.ServeCodec(jsonrpc.NewServerCodec(conn)) } }
基于jsonrpc的客户端
package main import ( "fmt" "log" "net" "net/rpc" "net/rpc/jsonrpc" ) func main() { //conn, err := net.Dial("tcp", "119.91.140.xx:8081") // 还一个 linux 机器 开启的服务 查看 请求数据的格式 conn, err := net.Dial("tcp", "localhost:6666") if err != nil { log.Fatal("net.Dial:", err) } client := rpc.NewClientWithCodec(jsonrpc.NewClientCodec(conn)) var reply string err = client.Call("HelloService.Hello", "Stefan", &reply) if err != nil { log.Fatal(err) } fmt.Println(reply) }
客户端 调用结果
客户端调用时发送的数据格式。例如,通过命令nc -l 1234在同样的端口启动一个TCP服务。然后再次执行一次RPC调用将会发现nc输出了以下的信息:
在linux 机器 开启一个 tpc 然后用客户端调用测试 如下
[root@VM-16-9-centos ~]# nc -l 8081 {"method":"HelloService.Hello","params":["Stefan"],"id":0}
这是一个JSON编码的数据,其中method部分对应要调用的由RPC服务和方法组合成的名字,params部分的第一个元素为参数,id是由调用方维护的唯一的调用编号。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理