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

时间:2015-12-01 17:45:08

标签: architecture network-protocols http2

HTTP / 2引入了一些非常有趣的功能,例如流水线操作,多路复用和服务器推送承诺;这本身就很棒。 作为回报,我们牺牲了WebSockets。

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

所以手头的问题:
有没有办法建立一个 HTTP / 2连接,允许服务器和客户端相互发送任意消息(二进制消息的额外点),而无需为定义不同的协议客户端发送消息服务器发送消息

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

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

PS。本练习的目的是确定是否可以在没有服务器/客户端体系结构的情况下在HTTP / 2之上设计传输协议(如GRPC,Thrift等),但是双方都可以发送和接收消息等功能,例如req / resp,pub / sub,rpc等可以构建在。

之上

1 个答案:

答案 0 :(得分:5)

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

还有一些说明(欢迎更正):

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

HTTP / 2推送称为推送,但它与从服务器推送的通知无关。通过节省往返次数,这或多或少是一种减少应用程序加载时间的合理方法。