阿丹:
不断学习新技术,丰富自己了解更多才能扩展更多世界可能。
官网
WebSocket首页、文档和下载 - HTML5开发相关 - OSCHINA - 中文开源技术交流社区
软件简介
WebSocket 是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 WebSocket 通信协议于 2011 年被 IETF 定为标准 RFC 6455,WebSocketAPI 被 W3C 定为标准。
现在,很多网站为了实现即时通讯 (real-time),所用的技术都是轮询 (polling)。轮询是在特定的的时间间隔 (time interval)(如每 1 秒),由浏览器对服务器发出 HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的 HTTP request d 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求 (request),然而 HTTP request 的 header 是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽。
而最比较新的技术去做轮询的效果是 Comet – 用了 AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求 (reuqest)。
在 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此 WebSocket 协议中,为我们实现即使服务带来了两大好处:
1. Header
互相沟通的 Header 是很小的 - 大概只有 2 Bytes
2. Server Push
服务器可以主动传送数据给客户端
阿丹解读:
WebSocket是基于HTTP协议的升级。WebSocket协议的底层原理是基于HTTP协议的,但是它不同于HTTP协议,因为它允许服务器主动向客户端发送数据。WebSocket协议的底层原理是通过HTTP协议的升级来实现的。当客户端向服务器发送一个WebSocket请求时,服务器会返回一个HTTP 101状态码,表示协议已经升级。在升级之后,客户端和服务器之间的通信就不再是基于HTTP协议了,而是基于WebSocket协议。就是不在需要我们自己前台去通过定时器等等去后台进行获取了,而是通过这个协议类似于发布订阅模式来进行的。
WebSocket协议的使用场景
WebSocket协议通常应用于需要实时通信的场景,包括但不限于:
- 社交聊天:WebSocket可以用于实现实时聊天应用,比如在网页版的聊天应用中,WebSocket可以用于建立持久连接,发送和接收消息。
- 弹幕系统:在视频网站或直播平台上,用户可以发送弹幕。使用WebSocket,可以实时将这些弹幕发送到所有人。
- 多玩家游戏:WebSocket可以用于实现实时多人在线游戏。通过WebSocket,服务器可以实时将游戏状态推送到客户端,从而实现游戏的同步。
- 协同编辑:当多个用户在同一文档上工作时,使用WebSocket可以实时同步每个人的编辑操作,从而避免版本冲突。
- 股票基金实时报价:金融界的数据变化非常快,使用WebSocket可以实时将最新数据推送到客户端。
- 体育实况更新:对于正在进行的体育比赛,实时更新比分和比赛状态是非常重要的。使用WebSocket可以实现这一功能。
- 视频会议/聊天:WebSocket可以用于实现视频会议或聊天应用,使得分布在世界各地的人可以在同一平台上进行实时交流。
- 智能家居:通过WebSocket,智能家居设备可以实时与云端服务器通信,从而进行设备的控制和状态监测。
这些场景的共同特点是都需要实时、双向的通信,而WebSocket协议正好满足这一需求。
WebSocket协议同类型协议
除了WebSocket协议之外,还有其他的实时通信协议,例如:
- HTTP/2 Server Push:HTTP/2协议中引入了一种新技术,即服务器推送(Server Push)。通过这种技术,服务器可以在客户端还没有请求资源之前,主动将资源推送给客户端。这可以减少页面加载时间,提高网页的响应速度。
- WebSockets over QUIC:QUIC是一种基于UDP的传输协议,它提供了比TCP更快的数据传输速度。WebSockets over QUIC是一种基于QUIC的WebSocket协议实现。由于QUIC是基于UDP的,因此它可以避免TCP的一些问题,例如TCP的慢启动和拥塞控制等。
- HTTP/3:HTTP/3是基于QUIC的下一代HTTP协议版本。它提供了比HTTP/2更高的性能和更好的安全性。
WebSocket协议同类型协议对比(用于技术选型)
WebSocket协议是一种实时通信协议,它与其他实时通信协议相比,具有以下特点和区别:
- WebSocket协议:WebSocket是一种全双工通信协议,允许服务器主动向客户端发送数据。它基于TCP协议,但需要在HTTP协议的基础上进行第一次握手。一旦握手成功,数据就可以在单一的TCP连接上进行双向传输。WebSocket的URL格式形如:ws://localhost:80/、wss://localhost:443/。其中,“ws”代表WebSocket,“wss”代表WebSocket Secure,也就是通过TLS或SSL加密的WebSocket。
- HTTP/2 Server Push:HTTP/2 Server Push是HTTP/2协议引入的一种新技术,允许服务器在没有收到客户端请求之前,主动将资源推送给客户端。这可以减少页面加载时间,提高网页的响应速度。
- WebSockets over QUIC:WebSockets over QUIC是一种基于QUIC的WebSocket协议实现。QUIC是一种基于UDP的传输协议,它提供了比TCP更快的数据传输速度。由于QUIC是基于UDP的,因此它可以避免TCP的一些问题,例如TCP的慢启动和拥塞控制等。
- HTTP/3:HTTP/3是基于QUIC的下一代HTTP协议版本。它提供了比HTTP/2更高的性能和更好的安全性。
- MQTT:MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布-订阅模式的消息传输协议。MQTT协议主要用于物联网设备之间的通信,具有低带宽、低能耗、可靠性高、支持异步通信等特点。
总体来说,WebSocket协议与其他实时通信协议相比,具有以下区别:
- WebSocket协议是一种应用层协议,而HTTP、MQTT等协议主要应用于传输层或应用层。
- WebSocket协议可以建立持久连接,实现双向通信,而HTTP等协议通常只能实现单向通信。
- WebSocket协议的数据报文较小,包头非常小,而HTTP等协议的数据报文通常较大,包头也较大。
- WebSocket协议适用于实时交互场景,例如游戏、聊天等,而HTTP等协议适用于请求-响应场景,例如网页浏览、下载等操作。
- MQTT协议适用于物联网设备之间的通信,具有低带宽、低能耗等特点。
在选择实时通信协议时,需要根据具体的应用场景和需求来选择最合适的协议。