RPC 协议都约束了啥?
資深大佬 : chaleaoch 10
百度查的东西都是 类似 “RPC 就是要像调用本地的函数一样去调远程函数” “RPC vs Restful” “RPC vs Socket” “RPC vs http” 之类的, 上面这些我都算理解.
不过我没明白的是, 那么 RPC 作为一个协议都约束了什么? 约束了 API 吗? 譬如下段代码中的RegisterName net.Listen listener.Accept() rpc.ServeConn(conn)
如果不是, 那到底约束了啥? 还是说 RPC 就是一个抽象概念而已. 没啥实际协议?
// HelloService 123 type HelloService struct{} //Hello 方法必须满足 Go 语言的 RPC 规则: //方法只能有两个可序列化的参数, 其中第二个参数是指针类型, 并且返回一个 error 类型, //同时必须是公开的方法。 func (p *HelloService) Hello(request string, reply *string) error { *reply = "hello:" + request return nil } //将 HelloService 类型的对象注册为一个 RPC 服务 func main() { // 1. 注册 rpc.RegisterName("HelloService", new(HelloService)) // 2. 创建 listener listener, err := net.Listen("tcp", ":1234") if err != nil { log.Fatal("ListenTCP error:", err) } // 3. 获取一个连接 conn, err := listener.Accept() if err != nil { log.Fatal("Accept error:", err) } // 4. 把连接和 rpc 绑定.被注册的 HelloService 和 conn 绑定. rpc.ServeConn(conn) }
大佬有話說 (8)