http连接是无状态的,可以通过ajax轮询和long poll来实现websocket类似的效果,但是会消耗服务端资源。
ajax是浏览器不断的向服务端建立连接,然后断开连接,周而复始的,所以需要服务端有很快的处理能力。
long poll与ajax 轮询差不多,只不过long poll是阻塞的,即客户端发起连接后,如果没有消息,就一直不返回response给客户端,直到有消息才返回,返回完之后,客户单再次建立连接。。。周而复始。
从上面两种可以看到,都是在不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的另外一个特点,被动性。
而websocket协议就具有主动性。
websocket协议首先借助http协议来完成握手过程,建立websocket连接。然后就可以做到源源不断的消息传递了,而且服务端可以主动发送消息给客户端。websocket一般是由客户端来关闭的。websocket连接一般是长时间存在的。
总结来说:Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求。