使用单个 HTTP/2 连接进行双向(和对称)通信

Using a single HTTP/2 connection for bidirectional (and symmetric) communication

HTTP/2 介绍了一些非常有趣的特性,例如流水线、多路复用和服务器推送承诺;这本身就很棒。 在 return 中,我们牺牲了 WebSockets。

理论上HTTP/2允许服务器和客户端以推送承诺的形式进行双向通信。服务器甚至可以在被要求之前向客户端发送响应。再次;惊人的。 虽然这些请求与客户的请求不同。

所以手头的问题:
有没有一种方法可以让 single HTTP/2 连接允许服务器和客户端发送任意消息(二进制消息的加分)而无需定义不同的客户端发送消息服务器发送消息的协议?

WebSockets 是我正在寻找的一个很好的例子,因为任何一方都可以发起连接,然后双方都可以发送消息。

不破坏 HTTP/2 的解决方案是理想的,但也欢迎滥用协议。
非常感谢您。

ps。这个练习的 objective 是想弄清楚是否可以在没有 server/client 架构的 HTTP/2 之上设计 GRPC、Thrift 等传输协议,但双方都可以发送并接收消息,以便可以在

之上构建 req/resp、pub/sub、rpc 等功能

现在最接近您想要的是服务器发送的事件。它应该可以很好地与 HTTP/2 一起工作,并且除了惯用的 IE 之外,所有浏览器都支持它,但是有一个 polyfill 可用(它会占用你的 RAM)。但是,没有某种转义就没有二进制支持,因为换行符用于分隔消息部分和消息本身。

补充几点(欢迎指正):

  • Websockets 运行良好。 HTTP/2 Connect 应该在不久的将来可以使用,如果不是现在的话。
  • 但是服务器无法启动到客户端的websockets。
  • 推送承诺有一个非常不同的用途,不,你不能用它们代替 websockets。

HTTP/2推送就叫推送,与服务器推送的通知无关。这或多或少是一种通过节省往返次数来减少应用程序加载时间的明智方法。