RPC是远程过程调用(Remote Procedure Call)的缩写形式,是分布式系统中不同节点间流行的通信方式。
一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,Client Stub以及Server Stub,这个Stub大家可以理解为存根。分别说说这几个组件:
- 客户端(Client),服务的调用方。
- 服务端(Server),真正的服务提供者。
- 客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
- 服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法。
Go 语言的 RPC 包的路径为 net/rpc,可以猜测该RPC包是建立在 net 包基础之上的。下面我们尝试基于 rpc 实现一个打印的例子。
服务端 server
先构造一个 HelloService 类型,其中的 Hello 方法用于实现打印功能:
server
❝其中Hello方法必须满足Go语言的RPC规则:
- 方法只能有两个可序列化的参数,其中第二个参数是指针 类型
- 并且返回一个error类型,同时必须是公开的方法。
rpc.Register
客户端 clinet
客户端请求HelloService服务的代码:
❝通过rpc.Dial拨号RPC服务,然后通过client.Call调用具体的RPC方法。在调用 client.Call时,第一个参数是用点号链接的RPC服务名字和方法名字,第二和第三个参数分别我们定 义RPC方法的两个参数。
开启服务器端,开启客户端。客户端的执行结果如下:
图片及部分相关技术知识点来源于网络搜索,侵权删!
参考资料:
https://www.cnblogs.com/zs-notes/p/9334935.html
https://blog.csdn.net/jacky128256/article/details/104746334
《Go语言高级编程》
https://www.cnblogs.com/pangqianjin/p/14616076.html