websocket是一种网络通讯协议,浏览器只需要与服务器握手一次就能保持通信。是伴随着H5发布的一种新兴的协议。它是基于TCP的一种的协议,他与服务器的握手是Http的复写。那么为什么有了http协议,为什么还要有websocket呢?
这是因为http协议是一种无状态的协议,且与服务器的通信只要由客户端发送,极大的影响了通信的效率。
而websocket就不一样了,它是一种全双工通信协议。即不仅仅客户端可以与服务器发送消息,服务器也可以给客户端发送消息(参考订阅/发布模式),进行通信。例如天气的推送,聊天室等。
并且websocket可以实现持续的进行长连接。而http通信完后即断开连接。
在websocket发布之前,http需要每隔一小段时间就像服务器发送请求,看 服务器的数据是又有更新,是否有消息要发送给客户端,就不断的轮询服务器(不断的发送请求),而一个http请求需要由发送时间,服务器的处理时间,响应时间。这期间会造成大量资源的消耗,由不得不这样做。而websocket就不需要这样。它的连接只需要一次,就可以保持持久的实时通信。
http与websocket对比
http(超文本传输协议) | websocket |
无状态协议 需要多次连接,需要轮询服务器,以确保信息的随时更新 | 持续状态协议,只需要一次连接就可以实时保持通讯 |
请求只能由客户端发出, | b不仅仅客户端向服务器发起请求,服务器也可向客户端发出信息,实现双向通信。是全双工通信 |
较多的额外费用(overhead),每次发送消息都会有一个HTTP header信息,而且如果不用Keep-Alive每次还都要握手 | 不需要这么携带这么多的信息。只需要携带要发送的信息 |
websocket客户端的握手是一个基于http协议的握手, | j既可以发送文本,也可以发送二进制的数据。 |
websocket建立在TCP协议之上。服务器端实现起来比较容易。
无需考虑同源策略的限制,可以与任意服务器进行通信。
目前越来越多的浏览器实现了websocket,它已经称为了一种趋势。
来自[阮一峰老师](http://www.ruanyifeng.com/blog/2017/05/websocket.html)
目前它的实现有MDN API,可以去网站上看API。
参考阮一峰老师博客等。