11,877
社区成员




gRPC 提供了4种通信模式,除了5种单向通信方式外,还可以使用双向流式进行通信。
注:关于什么场景适用于gRPC,需要对服务器与客户端之间的通信模式,数据类型,操作方式进行综合分析之后确定。毕竟属于RPC 进程间通信范畴,通过protobuf 提升了序列化的效率与便捷性。 gRPC的适用范围基本覆盖了REST,但不意味着适用一切场景,如果是 pub-subscribe, producer-worker场景,RabbitMQ, Kafka 更合适,如果是强调通信的灵活性,使用ZeroMQ。
了解这4种模式,加深理解,才能在项目中合适地应用gRPC。
1. 单向RPC
gRPC的术语为unary RPC,这种方式与函数调用类似, client 发送1条请求,server回1条响应。
rpc SayHello(HelloRequest) returns (HelloResponse);
2. 服务器流式处理 RPC
客户端向服务器发送1条请求,服务器以回应多条响应消息,客户机从返回的流中读取数据,直至没有更多消息。 这时要在响应类型前加1个 stream关键字修饰。
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
3. 客户端流式处理 RPC,
由客户端写入一系列消息并将其发送到服务。 客户端完成消息写入后,它将等待服务器读取消息并返回其响应. 这种模式,要在request的类型前加 stream 修饰。
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
4. 双向流式处理 RPC
其中双方使用读写流发送一系列消息。这两个流独立运行,因此客户端和服务器可以按照它们喜欢的任何顺序进行读取和写入:例如,服务器可以等待接收所有客户端消息,然后再写入响应,或者它可以交替读取消息然后写入消息,或者读取和写入的某种其他组合。将保留每个流中消息的顺序。此模式下, request 与 response类型均需要用stream修饰。
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);
实现过程及代码,请 点击阅读