服务器推送技术
是指客户端和服务器端建立长连接,服务器可以把更新的消息实时发送到客户端。
具体的技术
Ajax轮询
浏览器每隔几秒就发请求,询问服务端有没有新消息。
long poll
浏览器每隔几秒就给服务端发请求,如果有新消息就返回,没有新消息就保持连接直到有消息再返回。
Websocket
客户端和服务端建立长连接,将消息推送的主动权交给服务端,服务端有新消息就通知客户端,不需要客户端每隔一段时间就发请求询问了。
Websocket不仅解决了服务端被动性的问题,也解决了服务端资源消耗的问题。
其实我们所用的程序是要经过两层代理的,即HTTP协议在Nginx等服务器的解析下,然后再传送给相应的Handler(php等)来处理。简单地说,我们有一个非常快速的 接线员(Nginx) ,他负责把问题转交给相应的 客服(Handler) 。
本身接线员基本上速度是足够的,但是每次都卡在客服(Handler)了,老有客服处理速度太慢。,导致客服不够。Websocket就解决了这样一个难题,建立后,可以直接跟接线员建立持久连接,有信息的时候客服想办法通知接线员,然后接线员在统一转交给客户。
同时Websocket也解决了HTTP非状态性的问题。
但是Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员要反复解析HTTP协议,还要查看identity info的信息。
Websocket与HTTP
Websocket是html5的协议,与HTTP没有实质上的关联,但是它兼容了浏览器现有的握手规范。