RPC相关概念

构造分布式程序的两种NF

1 面向通信
自己设计协议,然后自己研究怎么解协议。比如dubbo有自己的RPC协议,可以做到很高的性能。但这样显然很复杂。(如果你不想写个MyDubbo的话)
2 面向应用
自己写应用程序就好了,导入RPC库,RPC库里面爱用啥协议用啥协议。(你自己写分布式程序的时候也不用考虑dubbo怎么设计吧?)

远程过程调用,其实就是类似我们平时写的程序,只是程序中函数之类的实现在另一个机器上。(真实机器或者虚拟机)

RPC的优点:
解耦、便于迭代。PPT里说的RPC的优点应该是RPC库的优点,RPC库可以帮我们方便的构筑分布式程序。

可靠性语义

至少一次:如果你能收到一个预期的结果,那么说明远程的程序最少被调用了一次。
零次或多次:如果你没收到预期的结果,远程的程序可能没被调用(报文没了),也可能调用了(你没收到结果,他努力了)

端口的动态映射

32位的程序号不能直接映射到16位的端口号。即使可以,那也很浪费端口。毕竟大部分时候你只需要使用几个程序就好了。
因此我们需要一个端口映射器。每次客户端先访问端口映射器,获取自己想要的程序注册到了哪个端口上,再访问端口即可。
同理,服务器端需要把每个程序都注册到端口映射器里。
image.png

RPC的使用

image.png
构建RPC程序,需要RPCGEN,RPCGEN产生四种文件
Q.h 头文件
3个cpp 分别是客户端桩 服务端桩 xdr文件。
image.png

stub

实现通信功能。远程调用涉及到数据传输、数据处理等等,由桩来做这些脏活。我们调用本地的桩即可,桩不处理业务逻辑,只负责传输。