grpc服务器端推送的机制是什么?

时间:2019-06-24 15:40:35

标签: grpc http2 server-push

当我用grpc编写服务时,我试图通过服务器端推送机制将http / 2与websocket进行比较。

对于websocket,我知道客户端将发送带有Upgrade:WebSocket和Connection:Upgrade标头的请求到服务器,并建立长期连接。建立连接后,服务器将自由发送数据。

但是对于grpc,因为它是从Wiki页面https://en.wikipedia.org/wiki/HTTP/2_Server_Push路由到http / 2的,它表示服务器将需要预测客户端可能发送的潜在请求,并尽早发送PUSH_PROMISE帧尽可能。

这是我的两个问题:

  1. 这是否意味着服务器还需要从客户端接收相应的响应(请求)以响应此PUSH_PROMISE标头,以确定客户端是否要接收或拒绝特定的推送?

  2. 在Grpc中,如果我有一个服务器端流,请说每隔1秒从服务器发送一条消息。这是否意味着服务器需要每1秒或至少在服务器将其推送到客户端的每个数据帧之前向客户端发送一个PUSH_PROMISE?

1 个答案:

答案 0 :(得分:1)

gRPC当前不支持/使用PUSH_PROMISE。

gRPC中的流式RPC使用HTTP / 2流;整个RPC包含在HTTP的请求/响应中。主要区别在于,HTTP / 2实现通常允许此类流为双向流(客户端可以在读取部分响应后在请求中发送更多内容),而在HTTP / 1中则是命中或遗漏。

在gRPC中,客户端将始终启动RPC。但是对于服务器流,服务器随后可以通过流随时间回复多个消息。这与您在websockets中描述的场景类似。