a rpc using boost.asio and protobuf

本文介绍了如何利用protobuf和boost.asio构建一个简单的RPC。从定义.proto文件、远程调用原理到服务和方法描述符,再到客户端和服务器端的实现细节,详细阐述了RPC的工作流程和关键步骤。
摘要由CSDN通过智能技术生成

0 序言

protobuf在rpc方面,仅仅提供了一个简单的框架和数据序列化手段,构建client与server之间的连接、通信、存储、线程处理等多方面问题需要用户自己实现。下面,将简单介绍使用protobuf和boost.asio来构建一个简单的rpc。该rpc只是简单阐述protobuf的rpc框架,耦合度较高,具体实现需要根据业务场景来实施。

1 定义.proto文件

protobuf提供了专门的关键字来定义rpc,下面是.proto的文件内容。

// echo.proto
package echo;
cc_generic_services = true; // 指示生成rpc

message RpcRequest { // 存储rpc请求的数据
  required string msg = 1;
};

message RpcResponse { // 存储rpc反馈的数据
  required string msg = 1;
}

service EchoService { // 定义rpc的接口
  rpc Echo(RpcRequest) returns (RpcResponse);
  rpc Send(RpcRequest) returns (RpcResponse);
}

上面.proto文件,经过下面的protoc编译,生成echo.pb.h和echo.pb.cc两个文件。

$ protoc --proto_path=./ --cpp_out=./ echo.proto

下面是生成文件中包含的4个类,client和server都知道下面四个类的存在。他们的意义分别是:

  1. RpcRequest: 存储客户端发送的请求。
  2. RpcResponse: 存储server端发送的响应。
  3. EchoService: 在服务器端提供服务。
  4. EchoService_Stub:在client端作为EchoService的代表提供服务。
class RpcRequest : public google::protobuf::Message;
class RpcRequest : public google::protobuf::Message;
class EchoService : public google::protobuf::Service;
class EchoService_Stub : public EchoService;

需要注意,EchoService运行在服务端,EchoService_Stub代表EchoService,运行在客户端,为EchoService在客户端上的代理——客户端通过EchoService_Stub来提供服务。

此思想与插座相同。用户通过插座获得电能,插座为stub,而实际由远端的电厂来供电。

2 远程调用原理

rpc(远程调用)实际上是cl

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值