WebSocket简述

36 阅读2分钟

我正在参加「掘金·启航计划」

WebSocket特性

WebSocket是一种常见的用于在客户端与服务器之间进行数据传输的通信协议。具有以下特点:

  1. WebSoket协议是基于TCP的,实现了浏览器与服务器之间的全双工通信。
  2. 与HTTP协议有良好的兼容性。默认端口也是80和443,并且在握手阶段采用HTTP协议,因此握手时不容易被屏蔽,能通过各种HTTP代理服务器。
  3. 数据格式比较轻量,性能开销小,通信效率高。
  4. 可以发送文本,也可以发送二进制数据。
  5. 没有同源限制,客户端可以与任意服务器通信。

WebSocket的优点

为什么要使用WebSocket,而不使用AJAX & XMLHttpRequest进行通信呢? WebSocket具有以下优点:

  1. 支持从服务器主动发送消息给客户端
  2. 是一种持久化协议,可以建立长连接,http是非持久化协议

WebSocket的使用场景

由于WebSocket可以主动给客户端推送消息,所以WebSocket常常使用在实时聊天系统中

WebSocket握手建立连接的过程

WebSocket在握手阶段也是采用的HTTP协议,在HTTP协议头中,会包含协议升级的信息,以下为握手建立连接的HTTP请求

http升级为websocket.png

请求头中:

  • 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);
});