流程二:https://blog.csdn.net/wd3cwg38/article/details/104417616 int main() { echo::EchoRequest request; echo::EchoResponse response; request.set_message(hello tonull, from client); char* ip = argv[1]; char* port = argv[2]; std::string addr = std::string(ip) + : + std::stri RPC(Remote Procedure Call)是一种进程间通信机制,允许在一台计算机上的程序调用另一台计算机上的程序,就像它是一个本地函数一样。在这个场景中,我们关注的是RPC流程的客户端部分,包括`RpcChannel`、`RpcController`以及如何在客户端进行调用。 `RpcChannel`是RPC调用的核心接口,它负责实际的网络通信,将客户端的请求发送到服务器,并接收服务器的响应。在提供的代码中,`RpcChannel`有一个成员变量`impl_`,它是具体实现的指针,表明`RpcChannel`可能是一个抽象类,具体的网络通信逻辑由子类实现。`CallMethod`是`RpcChannel`的核心方法,它接受一个方法描述符、控制器、请求消息、响应消息和回调函数,执行远程调用。 接着,`RpcChannelImpl`是`RpcChannel`的具体实现,负责初始化和实际的CallMethod调用。它包含了服务器地址,以及可能的网络I/O和socket资源,这些是用来建立与服务器连接的关键组件。`Init`方法可能用于设置网络连接,而`CallMethod`则会使用这些资源来执行实际的RPC调用。 `RpcController`是RPC调用过程中的控制对象,用于管理调用的状态和错误信息。在上述代码中,它检查调用是否失败,并提供了错误文本。在RPC调用过程中,如果出现任何问题,`RpcController`可以提供反馈,例如超时或网络错误。 在客户端的主函数`main`中,首先创建了请求和响应的消息对象,然后通过命令行参数获取服务器的IP和端口,构建了服务器地址。接下来,创建了一个`RpcChannel`实例,使用这个通道创建了服务器的Stub(代理),这个Stub是服务端接口的本地表示,客户端通过它来调用远程方法。使用`RpcController`、请求、响应和空回调来调用`Echo`方法,如果调用失败,`RpcController`会报告错误,否则打印响应消息。 RPC流程在客户端涉及的主要步骤是: 1. 创建请求消息,设置请求参数。 2. 初始化`RpcChannel`,指定服务器地址。 3. 创建服务端接口的Stub。 4. 使用`RpcController`、Stub、请求消息、响应消息和回调函数调用远程方法。 5. 检查`RpcController`的状态以确认调用是否成功,处理响应。 这个过程是由Google的Protocol Buffers库支持的,该库不仅提供了序列化和反序列化数据的能力,还实现了RPC框架,使得跨进程甚至跨网络的通信变得简单。通过理解`RpcChannel`、`RpcController`和Stub的概念以及它们在客户端的角色,我们可以有效地构建和实现RPC客户端。
- 粉丝: 4
- 资源: 892
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助