Rpc远程过程调用

本文介绍了RPC远程过程调用的基本概念及模型,详细讲解了使用rpcgen工具简化RPC编程的过程,包括rpc文件编写、客户端和服务端代码实现等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Rpc远程过程调用

 

过程概念:一个传统的程序由一个或多个过程所组成。它们往往按照一种调用等级来

安排。从过程 n 到过程 m 的箭头代表由从 n 到 m 的调用。

 

 

远程过程调用模型使用了和传统过程一样的抽象。只是,它允许一个过程的边界跨越

两台计算机。下图表示了远程调用过程模型如何将一个程序划分成两片,每片在一个单

独的计算机上执行。当然,远程过程调用不能有一台计算机传递到另一台上。在程序可以

使用远程过程调用之前,必须加入允许程序与远程过程通信的协议软件。

 

 

 

 

 

RpcGen的使用

Rpcgen的使用让我们不用去考虑通信协议和数据的串行化。

PrcGen的使用主要如下图

 

 

1.  对功能模块进行划分,分理处分布在各计算机上的模块和对应的接口函数。

2.  编写rpc文件,主要声明要分布的接口函数和版本号

3.  根据rpc文件 用rpcgen工具生成头文件和客户端服务端文件。接口被映射成两个,分别供客户端和服务端调用。

4.  编写客户端,客户端主逻辑不变,包含rpcgen生成的头文件和客户端文件,同时将主程序中调用的函数接口映射为头文件中的接口。

  客户端需要增加handle = clnt_create ( RMACHINE, RDICTPROG, RDICTVERS, “tcp” ) ; 创建和服务器的连接句柄。

5.  编写服务器,包含头文件和生成的服务端文件,生成的服务端文件已经包含了main函数,只需要将接口函数映射为模块代码中的执行函数。

 

服务端需要portmap进行动态端口映射,我的是centos,为rpcbind

服务端在portmap注册监听端口,客户端连接portmap后获取程序的监听端口号,然后和服务器直接通信

.

 

 

 

1 服务端程序在portmap注册,并监听。

2 客户端连接portmap,根据注册ID(rpc文件中声明)和版本号获得服务端的监听端口。

3 客户端直接访问服务器进行通信访问。

 

Rpcgen为我们抽象出了通信协议,把精力主要放在分布模块代码的编写上。

 

 

主要内容摘自《linux网络编程》

端口映射是一个服务器,将RPC程序号转换为DARPA的协议端口号。在使用RPC调用时它必须运行。   portmap进程的主要功能是把RPC程序号转化为Internet的端口号。   当一个RPC服务器启动时,会选择一个空闲的端口号并在上面监听(每次启动后的端口号各不相同),同时它作为一个可用的服务会在portmap进程注册。一个RPC服务器对应惟一一个RPC程序号,RPC服务器告诉portmap进程它在哪个端口号上监听连接请求和为哪个RPC程序号提供服务。经过这个过程,portmap进程就知道了每一个已注册的RPC服务器所用的Internet端口号,而且还知道哪个程序号在这个端口上是可用的。portmap进程维护着一张RPC程序号到Internet端口号之间的映射表,它的字段包括程序号、版本号、所用协议、端口号和服务名,portmap进程通过这张映射表来提供程序号-端口号之间的转化功能   如果portmap进程停止了运行或异常终止,那么该系统上的所有RPC服务器必须重新启动。首先停止NFS服务器上的所有NFS服务进程,然后启动portmap进程,再启动服务器上的NFS进程。   但portmap只在第一次建立连接的时候起作用,帮助网络应用程序找到正确的通讯端口,但是一旦这个双方正确连接,端口和应用就绑定,portmap也就不起作用了。但对其他任何第一次需要找到端口建立通讯的应用仍然有用。   简单的说,portmap就是应用和端口的婚姻介绍人,双方成事了以后,媒婆就没用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值