WebSocket笔记(一) 初步认识
使用场景
- 服务器,需要向客户端主动端推送消息(数据)
- 客户端,需要实施获取服务器上数据更新或变化
基本概念
WebSocket是一种能在单个TCP连接
上进行全双工通讯
的协议。
特点
较少的控制开销
在连接创建后
,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于HTTP请求每次都要携带完整的头部
,此项开销显著减少了。
更强的实时性
由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。
保持连接状态
与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。
更好的二进制支持
Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
可以支持扩展
Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。
更好的压缩效果
相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。
没有跨域问题
不同于HTTP,WebSocket并没有同源限制,客户端可以与任意服务器通信
与 HTTP 协议有着良好的兼容性
默认端口同HTTP/HTTPs,也是80
和443
握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
对比 | HTTP | WebSocket |
---|---|---|
协议标识 | http/https | ws/wss |
端口 | 80/443 | 80/443 |
普通80端口:ws://example.com:80/some/path
加密443端口:wss://example.com:80/some/path
服务器端容易实现
Java/Python/Node/Php/.NET,好像都是支持的(表示心虚,我只是百度了一圈,都能找到现成解决方案)
参考文章
参考文章
维基百科 WebSocketWebSocket 教程(阮一峰)
WebSocket资料总结
websocket与comet的性能对比
浅谈HTTP长连接
WEB通讯技术之短轮询、长轮询(comet)、长连接(SSE)、WebSocket