Skip to content

Latest commit

 

History

History
36 lines (23 loc) · 1.93 KB

streaming-rpc.md

File metadata and controls

36 lines (23 loc) · 1.93 KB

流式RPC

除普通的一问一答的RPC形式之外,flare还提供了服务端流式RPC客户端流式RPC以及双向流式RPC的支持。

取决于具体协议,并非所有协议都支持流式RPC。对于流式RPC的场景,通常我们推荐使用flare内置的二进制协议

为标识一个方法为流式方法,可通过在定义服务时将请求和/或响应使用stream关键字修饰。(目前Protocol Buffers官方文档尚未文档化此关键字,但gRPC的文档中对此作了介绍。)

对于老式代码,通过也可以通过gdt.streaming_response这一option来标记方法是服务端流式RPC。这一option的作用和使用returns (stream XxxResponse)相同:

除非有兼容性需求,否则我们不再推荐使用这一自定义option

syntax = "proto3";

// `gdt.streaming_response` is defined in it.
import "common/rpc/rpc_options.proto";

// ... (Definition of `EchoRequest` & `EchoResponse`.)

service EchoService {
  rpc EchoStreamResponse(EchoRequest) returns (stream EchoResponse);
  rpc EchoStreamResponse2(EchoRequest) returns (stream EchoResponse) {
    option (gdt.streaming_response) = true;
  }
}

其中EchoStreamResponseEchoStreamResponse2实际接口(服务端及客户端)相同。

对于新接口,我们推荐使用官方的stream关键字来标识。

为方便进行流式RPC的消息读写,我们提供了StreamReader<T>StreamWriter<T>。具体使用方式参见文件中注释。


返回目录