web实时通信技术方案
http长轮询
通过延长http响应超时时间.使得服务端可以在一定时间内持有该连接. 当有新消息时,再响应.
servelet3支持异步请求。 springmvc对其进行了支持, 使用DeferredResult
SSE server sent event
基于 WebSocket 协议的一种服务器向客户端发送事件和数据的单向通讯 开发简单,和传统的http开发几乎无任何差别,客户端开发简单,有标准支持 单工通信.只能服务器端向客户端发送数据.
webSocket
在应用层的socket连接.基于TCP/IP. 全双工通信
websocket框架
cometd 实现了http长轮询与webSocket. 可根据客户端的支持程度,自动选择合适的通信技术. netty spring
web push
基于浏览器的notificaitonApi实现. 浏览器向服务商订阅, 得到订阅endpoint. 然后将endpoint发送到服务端. 服务端通过endpoint,发送消息到服务商, 服务商推送消息到浏览器. 国内网络无法使用FCM/GCM/firebase.
HTTP/2
HTTP/2的推送技术,只针对静态资源,且必须是编排好的资源. 不能像websocket一样推送. HTTP/2的推送用于提升网页加载速度. 但是由于没有缓存协商, 会导致网络资源浪费.