BRPC 会话:一次连接,多次请求响应 - 代码示例
///'#include ///'iostream///'//n#include ///'brpc/server.h///'//n#include ///'brpc/channel.h///'//n//n// 定义自定义的服务类//nclass MyService : public example::EchoService {//npublic://n // 实现Echo接口的方法//n void Echo(::google::protobuf::RpcController* cntl_base,//n const ::example::EchoRequest* request,//n ::example::EchoResponse* response,//n ::google::protobuf::Closure* done) override {//n // 强制转换RpcController为brpc::Controller//n brpc::Controller* cntl =//n static_castbrpc::Controller*(cntl_base);//n//n // 输出请求消息//n std::cout << ///'Received request: ///' << request->message() << std::endl;//n//n // 设置响应消息//n response->set_message(///'Hello, ///' + request->message());//n//n // 完成处理//n done->Run();//n }//n};//n//nint main() {//n // 初始化brpc//n brpc::Server server;//n//n // 添加自定义的服务//n MyService service;//n//n // 注册服务到服务器//n if (server.AddService(&service,//n brpc::SERVER_DOESNT_OWN_SERVICE) != 0) {//n std::cerr << ///'Fail to add service///' << std::endl;//n return -1;//n }//n//n // 启动服务器//n brpc::ServerOptions options;//n if (server.Start(9000, &options) != 0) {//n std::cerr << ///'Fail to start server///' << std::endl;//n return -1;//n }//n//n // 创建一个channel与服务器建立连接//n brpc::Channel channel;//n if (channel.Init(///'127.0.0.1:9000///', NULL) != 0) {//n std::cerr << ///'Fail to initialize channel///' << std::endl;//n return -1;//n }//n//n // 创建一个stub用于调用远程服务//n example::EchoService_Stub stub(&channel);//n//n // 创建一个请求和响应对象//n example::EchoRequest request;//n example::EchoResponse response;//n//n // 发送多个请求并接收响应//n for (int i = 0; i < 5; ++i) {//n // 设置请求消息//n request.set_message(///'World ///' + std::to_string(i));//n//n // 发起远程调用//n brpc::Controller cntl;//n stub.Echo(&cntl, &request, &response, NULL);//n//n // 检查远程调用是否成功//n if (cntl.Failed()) {//n std::cerr << ///'Fail to send request: ///' << cntl.ErrorText() << std::endl;//n return -1;//n }//n//n // 输出响应消息//n std::cout << ///'Received response: ///' << response.message() << std::endl;//n }//n//n // 停止服务器//n server.Stop(0);//n//n return 0;//n}//n//n// 在上面的示例中,我们首先定义了一个自定义的服务类MyService,它继承自brpc自动生成的服务类example::EchoService,并重写了Echo方法来实现自定义的逻辑。然后我们创建了一个brpc的服务器server,添加了我们的自定义服务,并启动了服务器。//n//n接着,我们创建了一个brpc的通道channel,用于与服务器建立连接。然后创建了一个服务stubstub,用于调用远程服务。接下来,我们循环发送多个请求并接收响应。每次循环中,我们设置请求消息,创建一个brpc::Controller对象用于控制远程调用,调用stub.Echo方法发起远程调用,并检查调用是否成功。最后,我们输出响应消息。//n//n在循环结束后,我们停止了服务器。//n/
原文地址: https://www.cveoy.top/t/topic/pqfo 著作权归作者所有。请勿转载和采集!