HTTP/2引入了一些非常有趣的功能,例如流水线操作,多路复用和服务器推送承诺; 这本身就很棒.作为回报,我们牺牲了WebSockets.
理论上,HTTP/2允许以推送承诺的形式在服务器和客户端之间进行双向通信.服务器甚至可以在被要求之前向客户端发送响应.再次; 真棒.这些请求虽然与客户的请求不同.
所以,眼下的问题:
有没有办法有一个单一的 HTTP/2接口,允许服务器和客户端任意消息(二进制的加分)发送到彼此,而不需要定义不同的协议,用于客户端发送的消息和服务器发送消息?
WebSockets是我正在寻找的一个很好的例子,因为任何一方都可以启动连接,然后两者都可以发送消息.
不破坏HTTP/2的解决方案将是理想的,但也欢迎协议滥用.
非常感谢你提前.
PS.本练习的目的是确定是否可以在没有服务器/客户端体系结构的情况下在HTTP/2之上设计传输协议(如GRPC,Thrift等),但是双方都可以发送和接收消息等功能,例如req/resp,pub/sub,rpc等可以构建在上面.
现在,最接近您想要的是服务器发送的事件.它应该可以很好地与HTTP/2一起工作,除了习惯性的IE之外,所有浏览器都支持它,但是有一个polyfill可用(它会占用你的RAM).没有某种类型的转义,没有二进制支持,因为换行符用于分隔消息部分和消息本身.
还有一些说明(欢迎更正):
Websockets很好用.如果不是现在,HTTP/2 Connect在不久的将来应该是可用的.
但是服务器无法启动到客户端的websockets.
推送承诺服务于一个非常不同的目的,不,你不能用它们代替websockets.
HTTP/2推送称为推送,但它与从服务器推送的通知无关.通过节省往返次数,这或多或少是减少应用程序加载时间的明智方法.