> 文章列表 > 理解websocket连接的原理

理解websocket连接的原理

理解websocket连接的原理

背景

Websocket是一个持久化的协议,相对于HTTP这种非持久的无状态协议来说


一、问题

http long poll,或者ajax轮询都可以实现实时信息传递,为什么还需要websocket?

二、理解

ajax轮询:浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。
long poll:客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。
总结:

  1. 两者都是采用轮询的方式,而long poll是阻塞式的
    ajax轮询 需要服务器有很快的处理速度和资源。(速度)
    long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小)
  2. 两者都体现了服务器的被动性

websocket的出现:

  1. 解决了服务器的被动性,当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端。
    理解:只需要经过一次HTTP请求,就可以做到源源不断的信息传送了。(在程序设计中,这种设计叫做回调,即:你有信息了再来通知我,而不是我每次跑来问你)
  2. 解决了上面同步有延迟,而且还非常消耗资源的情况
    理解:建立websocket连接后,可以直接跟接线员(Nginx服务器)建立持久连接,有信息的时候客服(Handler)想办法通知接线员,然后接线员在统一转交给客户(客户端)。
    而在传统的方式上,要不断的建立,关闭HTTP协议,由于HTTP是非状态性的,每次都要重新传输identity info(鉴别信息),来告诉服务端你是谁。
    Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员要反复解析HTTP协议,还要查看identity info的信息。

总结

websocket连接,只需要一次HTTP握手,避免HTTP的无状态性,且服务器可以主动通知,不限次数,直到请求关闭。