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

相关推荐
不做菜鸟的网工2 天前
BGP特性
网络协议
AsulTop3 天前
精简版 OpenWrt/LEDE uhttpd/rpc/mod-rpc/ Ubus Json-RPC 从0修复直到可用
rpc·路由器·openwrt·lede·uhttpd·ubus修复
明月_清风4 天前
开发者网络概念全扫盲:一篇搞定
后端·网络协议
刘马想放假4 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
王二端茶倒水5 天前
一套可落地的无线运营方案,不能只管 AP,还要管用户、计费和运维
网络协议
162723816085 天前
EtherCAT 分布式时钟(DC)原理与配置实战:把多轴真正"对齐到同一时刻"
网络协议
王二端茶倒水6 天前
宽带无线项目,怎么从一次性交付变成长期运营收入?
网络协议
用户2530171996277 天前
第6篇:从技术到产品 — Ghost Proxifier 的设计哲学
网络协议
用户2530171996277 天前
第3篇:注入的艺术 — Ghost Proxifier 核心架构拆解
网络协议