webSocket

104 阅读2分钟

1 介绍

WebSocket是一种构建在TCP协议之上,实现全双工通信的协议。它提供了一种在客户端和服务器之间建立长连接的方式,可以实现双向通信,而不仅仅是客户端请求-服务器响应。

WebSocket 是 HTML5 定义的一个新协议议,与传统的 http 协议不同,该协议允许由服务器主动的向客户端推送信息。使用 WebSocket 协议的缺点是在服务器端的配置比较复杂。WebSocket 是一个全双工的协议,也就是通信双方是平等的,可以相互发送消息,而 SSE 的方式是单向通信的,只能由服务器端向客户端推送信息,如果客户端需要发送信息就是属于下一个 http 请求了

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

2 工作原理

客户端发起WebSocket连接,通过HTTP协议发起Upgrade请求将连接升级为WebSocket连接。

服务器端响应Upgrade请求,完成连接升级。

建立WebSocket连接后,客户端和服务器端就可以通过这个连接通道自由地双向传输数据,无需等待对方的请求。

3 优缺点

优点:
  • 允许全双工通信:  客户端和服务器端都可以主动发送数据。
  • 更实时:  服务器有新数据可以立即主动推送给客户端。
  • 更轻量:  建立连接的开销小,通信高效,减少不必要的网络请求。
  • 利用HTTP协议做升级握手,默认端口是80和443,避免了跨域问题。
  • 支持扩展,可以扩展自定义的子协议。
缺点:
  • 不如HTTP协议广泛应用,存在兼容性问题。
  • 需要浏览器和服务器端都支持WebSocket协议,增加了开发成本。
  • 有连接建立和关闭的开销,不适用于量小数据的交互。
  • 安全性需要额外考虑,通信内容是明文,需要加密。
  • 处于连接状态时,会占用服务器端资源。

4 实现 在Node.js中,可以使用ws库来实现WebSocket连接。以下是一个简单的WebSocket示例:

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port8080 });

wss.on('connection'function connection(ws) {
  console.log('client connected');

  ws.on('message'function incoming(message) {
    console.log('received: %s', message);
  });

  ws.on('close'function close() {
    console.log('client disconnected');
  });
});

参考资料:

1 blog.csdn.net/m0_69082030… 2 www.php.cn/faq/508820.…