gRPC的通信方式服务端流式/客户端流式,双向流式传输方法

grpc异步服务器/客户端双向流式传输方法

GRPC介绍

  • gRPC 是一个由Google开发的高性能、开源、跨多种编程语言和通用的远程过程调用协议(RPC) 框架,用于客户端和服务器端之间的通信,使用HTTP/2协议并将 ProtoBuf 作为序列化工具。

GRPC的通信方式:

简单模式(Simple RPC)

  • 这种模式基于传统的http/1.0模式,即客户端发起一次请求,服务端响应一个数据,这和普通的RPC没有什么区别

服务端数据流模式(Server-side streaming RPC)

  • 这种模式是客户端发起一次请求,类似于 “订阅” 模式,服务端返回一段连续的数据流。
  • 典型的例子是客户端向服务端发送一个股票代码,服务端就把该股票的实时数据源源不断的返回给客户端。

客户端数据流模式(Client-side streaming RPC)

  • 与服务端数据流模式相反,这次是客户端源源不断的向服务端发送数据流,而在发送结束后,由服务端返回一个响应。
  • 典型的例子是物联网
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
gRPC中,服务端主动推送数据到客户端需要使用流式RPC。流式RPC允许服务端客户端之间建立一个持久化连接,从而允许它们在连接上相互发送多个消息。 下面是一个简单的示例,展示了如何在gRPC中使用流式RPC实现服务端主动推送数据到客户端: ```protobuf // 定义服务 service MyService { // 定义一个客户端服务器流式RPC方法 rpc ServerStreamMethod(MyRequest) returns (stream MyResponse) {} } // 实现服务 class MyServiceImpl : public MyService::Service { public: // 实现客户端服务器流式RPC方法 Status ServerStreamMethod(ServerContext* context, const MyRequest* request, ServerWriter<MyResponse>* writer) override { // 循环发送数据到客户端 while (true) { MyResponse response; // 发送数据 writer->Write(response); } // 返回OK状态 return Status::OK; } }; // 启动服务 void RunServer() { std::string server_address("0.0.0.0:50051"); MyServiceImpl service; ServerBuilder builder; builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); builder.RegisterService(&service); std::unique_ptr<Server> server(builder.BuildAndStart()); std::cout << "Server listening on " << server_address << std::endl; server->Wait(); } ``` 在这个示例中,`MyService`定义了一个名为`ServerStreamMethod`的客户端服务器流式RPC方法服务端实现了这个方法,并在其中循环发送数据到客户端客户端可以通过接收服务端发送的多个消息来接收数据。 需要注意的是,在使用流式RPC时,必须使用`stream`关键字来定义参数类型。例如,`stream MyResponse`表示一个可以接收多个`MyResponse`消息的流。在服务端实现中,需要使用`ServerWriter`来发送消息。在客户端实现中,需要使用`ClientReader`来接收消息。 希望这个示例能够帮助你理解如何在gRPC中实现服务端主动推送数据到客户端

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gopp-viper

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值