【问题标题】:grpc streaming over reverse proxy通过反向代理进行 grpc 流式传输
【发布时间】:2020-07-12 20:46:00
【问题描述】:

grpc 流式传输究竟是如何通过反向代理工作的?我的理解是,客户端和反向代理之间将建立持久连接,而反向代理和我的服务器之间的连接不是持久的——所以我的实际服务器,坐在反向代理后面,如何继续流式传输消息通过持久连接发送给客户端?

另外,假设我想保留持久连接以处理推送通知(即我的服务器跟踪持久连接,在我想要通知特定客户端的服务器端发生了一些事情,我得到了流/该特定客户端的持久连接然后通过它发送消息)。

【问题讨论】:

    标签: grpc


    【解决方案1】:

    gRPC 流使用 HTTP/2 流。 HTTP/2 流绑定到它们启动的 TCP 连接。反向代理将创建一个 HTTP/2 流到后端以转发 RPC。因此“流”将绑定到两个 TCP 连接:客户端 → 代理,代理 → 后端。如果任一 TCP 连接关闭,则 RPC 将被取消。使用 HTTP/2,即使反向代理也有与后端的半持久连接,但它们确实可能比客户端更频繁地循环连接。

    【讨论】:

    • 感谢您的回答!我对此有一个快速跟进的问题:代理如何跟踪映射?即当服务器想要将事件发送回客户端时,它将通过代理->后端连接将其发送到代理。那么代理如何找到相应的客户端--->代理连接来发送消息?
    • 流都有 id,但它可能会使用一些内部数据结构来表示流。所以它将是一些“流指针”。如果您将两个指针交叉引用到彼此的结构中,它甚至不需要哈希映射。如果您查看this example grpc proxy,您将看到 ServerCall 侦听器具有对 ClientCall 的引用,而 ClientCall 侦听器具有对 ServerCall 的引用。基本相同的方法。
    猜你喜欢
    • 1970-01-01
    • 2017-10-27
    • 2018-07-29
    • 2012-12-11
    • 2019-07-03
    • 2021-09-10
    • 2015-11-18
    • 2016-04-27
    • 1970-01-01
    相关资源
    最近更新 更多