今天主要记录下websocket协议概念性的内容。
websocket是什么
websocket是html5提出的一种基础单个tcp连接进行的全双工通信协议。它是属于服务器推送技术的一种。
websocket出现的原因
对于客户端需要根据服务器数据实时更新页面的场景,在websocket协议出现之前,经常使用的是ajax轮询实现。但是此种技术存在的问题是:轮询效率低且非常浪费资源。
websocket原理
在握手阶段采用http的协议进行,此时请求头中会包含一些websocket相关的信息,当成功从http->升级到websocket协议后,既可以开始websocket协议通信。
和http的关系
两者有交集,但不是全部。
1. 与 http 协议有着良好的兼容性:
- 默认端口也是80和443;
- websocket的握手阶段采用的是http协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
2. 与http协议的不同:
- 请求发起端不同
http协议的请求只能由客户端发起,服务端不能主动推送数据给客户端。
websocket协议支持客户端和服务端任何一方发送数据或是关闭请求连接。 - 持久化
http协议 【request–> respose】 完成一次通信后即会断开连接。且http协议是无状态性的,每次发起请求,都需重新传输identity info(鉴别信息),来告诉服务端你是谁。
websocket只需要一次握手请求,成功升级websocket协议后【http->websocket】,即可一直保持与服务端的通信连接。 - websocket协议没有同源的限制
http请求存在同源策略,websocket不存在。改点可以在之前的一篇文章中得到论证。
websocket的优点
- 数据更新同步,无延时。有新的数据,服务器就会给推送。
- 节省带宽,减少资源的浪费。只需一次握手即可持久连接,可以减少每次握手时携带大量的认证信息,减少带宽的占用,提升效率;其次有新的数据服务器推送给客户端,减少客户端无意义的请求。
参考文章:http://www.ruanyifeng.com/blog/2017/05/websocket.html
https://www.zhihu.com/question/20215561/answer/40316953