gRPC 四模式之 服务器端流RPC模式

服务器端流RPC模式

在一元 RPC 模式中,gRPC 服务器端和 gRPC 客户端在通信时始终只有一个请求和一个响应。在服务器端流 RPC 模式中,服务器端在接收到客户端的请求消息后,会发回一个响应的序列。这种多个响应所组成的序列也被称为"流"。在将所有的服务器端响应发送完毕之后,服务器端会以 trailer 元数据的形式将其状态发送给客户端,从而标记流的结束。

c++ 实现服务器端主动推送消息

在gRPC中,服务端主动向客户端发送数据通常是通过服务器端流式RPC实现的。在这种模式下,客户端发送一个请求到服务器,获取一个读取服务端流的响应。这种模式可以让服务器主动推送消息给客户端。

以下是一个C++的例子,展示了一个简单的服务器端流式RPC的实现:

cpp 复制代码
// .proto file
service MyService {
  rpc MyStreamingMethod(MyRequest) returns (stream MyResponse);
}

// Server implementation
class MyServiceImpl final : public MyService::Service {
  Status MyStreamingMethod(const MyRequest* request, ServerWriter<MyResponse>* writer) override {
    MyResponse response;
    for (int i = 0; i < 10; ++i) {
      response.set_data("Data " + std::to_string(i));
      writer->Write(response);
    }
    return Status::OK;
  }
};

// Client implementation
void MyClient::MyStreamingMethod() {
  MyRequest request;
  request.set_data("Hello");

  ClientContext context;
  std::unique_ptr<ClientReader<MyResponse>> reader(
      stub_->MyStreamingMethod(&context, request));

  MyResponse response;
  while (reader->Read(&response)) {
    // Process response.
    std::cout << response.data() << std::endl;
  }

  Status status = reader->Finish();
  if (status.ok()) {
    std::cout << "MyStreamingMethod succeeded." << std::endl;
  } else {
    std::cout << "MyStreamingMethod failed." << std::endl;
  }
}

在这个例子中,MyStreamingMethod是一个服务器端流式RPC,客户端发送一个MyRequest请求,然后读取一个流的MyResponse响应。服务器在接收到请求后,通过ServerWriter对象向客户端发送多个响应。

客户端向服务端发送请求后的回复,通常是通过返回一个Status对象来实现的。在上述例子中,MyStreamingMethod在完成所有响应发送后,返回一个Status::OK表示成功。客户端通过调用ClientReader::Finish方法来获取这个状态。


分享一个有趣的 学习链接:https://xxetb.xet.tech/s/HY8za

相关推荐
xixixi7777742 分钟前
“C2隐藏”——命令与控制服务器的隐藏技术
网络·学习·安全·代理·隐藏·合法服务·c2隐藏
在多学一点1 小时前
iptables的源地址转换和iptables的目标地址转换
网络
gadiaola1 小时前
【计算机网络面试篇】HTTP
java·后端·网络协议·计算机网络·http·面试
罗汉松(山水白河)1 小时前
关于串口与UDP通讯的实验
单片机·嵌入式硬件·网络协议·udp·tcp·串口、
Xの哲學2 小时前
Linux 分区表深度技术剖析
linux·网络·算法·架构·边缘计算
fei_sun3 小时前
【复习】计网每日一题1124---UDP首部检验和计算、检验和特殊含义
网络·网络协议·udp
2***57423 小时前
前端WebSocket案例
网络·websocket·网络协议
百***81273 小时前
《计算机网络》(B)复习
网络·计算机网络
木易 士心4 小时前
WebSocket 与 MQTT 在即时通讯中的深度对比与架构选型指南
websocket·网络协议·架构
赖small强4 小时前
【Linux 网络基础】网络通信中的组播与广播:基础概念、原理、抓包与应用
linux·网络·broadcast·组播·广播·multicast