我正在参加「掘金·启航计划」
WebSocket特性
WebSocket是一种常见的用于在客户端与服务器之间进行数据传输的通信协议。具有以下特点:
- WebSoket协议是基于TCP的,实现了浏览器与服务器之间的全双工通信。
- 与HTTP协议有良好的兼容性。默认端口也是80和443,并且在握手阶段采用HTTP协议,因此握手时不容易被屏蔽,能通过各种HTTP代理服务器。
- 数据格式比较轻量,性能开销小,通信效率高。
- 可以发送文本,也可以发送二进制数据。
- 没有同源限制,客户端可以与任意服务器通信。
WebSocket的优点
为什么要使用WebSocket,而不使用AJAX & XMLHttpRequest进行通信呢? WebSocket具有以下优点:
- 支持从服务器主动发送消息给客户端
- 是一种持久化协议,可以建立长连接,http是非持久化协议
WebSocket的使用场景
由于WebSocket可以主动给客户端推送消息,所以WebSocket常常使用在实时聊天系统中
WebSocket握手建立连接的过程
WebSocket在握手阶段也是采用的HTTP协议,在HTTP协议头中,会包含协议升级的信息,以下为握手建立连接的HTTP请求
请求头中:
- Connection:Upgrade //表示向服务端请求协议升级
- Upgrade:websocket //表示请求升级为websocket协议
响应头中:
- Upgrade:websocket //响应了协议升级的请求,可以升级协议为websocket
- Connection:Upgrade //是处理协议升级的响应
WebSocket的创建
// 创建WebSocket连接.
const socket = new WebSocket('ws://localhost:8080');
// 连接成功触发
socket.addEventListener('open', function (event) {
socket.send('Hello Server!');
});
// 监听消息
socket.addEventListener('message', function (event) {
console.log('Message from server ', event.data);
});