Golang net.rpc.jsonrpc 包详解
net/rpc/jsonrpc
包提供了基于 JSON 的远程过程调用(RPC)客户端和服务端的实现。
客户端使用示例:
import (
"fmt"
"log"
"net/rpc/jsonrpc"
)
func main() {
// 连接到 RPC 服务器
client, err := jsonrpc.Dial("tcp", "localhost:8080")
if err != nil {
log.Fatal("dialing:", err)
}
// 调用 RPC 方法
var reply string
err = client.Call("ServiceName.MethodName", "RequestParam", &reply)
if err != nil {
log.Fatal("calling:", err)
}
fmt.Printf("Reply: %v\n", reply)
}
服务端使用示例:
import (
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
type Server struct{}
func (s *Server) MethodName(param string, reply *string) error {
*reply = "Response for " + param
return nil
}
func main() {
// 注册服务
rpc.Register(new(Server))
rpc.HandleHTTP()
// 监听 TCP 连接
l, e := net.Listen("tcp", ":8080")
if e != nil {
log.Fatal("listen error:", e)
}
// 接受连接并处理 JSON-RPC 请求
for {
conn, err := l.Accept()
if err != nil {
log.Fatal("accept error:", err)
}
go jsonrpc.ServeConn(conn)
}
}
在这两个示例中,我们创建了一个 RPC 服务器,它监听在 8080
端口上的 TCP 连接,并处理发送到该端口的 JSON-RPC 请求。服务端提供了一个方法 MethodName
,客户端可以调用这个方法。服务端还注册了自身,使得 RPC 系统能够识别其提供的方法。客户端连接到服务器,并调用服务器上的方法。
评论已关闭