如何使用HTTP / 2实现gRPC客户端流/双向流?
服务器流传输是有意义的,因为它可以利用服务器推送来发送对请求的多个响应,但是我尚不清楚它如何像通过websocket那样通过HTTP / 2传递双向消息。
答案 0 :(得分:3)
gRPC将流编码为HTTP正文。每条消息前都有一个五个字节的标头,由消息长度和标志字节组成。它不使用SERVER_PUSH或其他HTTP / 2特定功能进行流传输。
gRPC的核心是流式传输。一元(单个请求,单个响应)和服务器流(单个请求)只是产生更清洁的API或更优化的I / O行为的特殊情况。但是从网上看,一切看起来都与流式传输相同。
HTTP / 1的规范允许但不要求流式传输和双向连接,但是某些实现不支持它们。但是,由于具有HTTP / 2的性质,不支持它们通常需要更多工作。而且,没有十年历史的HTTP / 2代理会引起兼容性问题。 gRPC能够与HTTP / 2生态系统一起使用,以鼓励支持流传输。
有关gRPC编码的详细信息,请参见gRPC的PROTOCOL-HTTP2.md,尤其是Length-Prefixed-Message
。