WebSocket 是一种在单个 TCP 毗连上举行全双工通讯的协议。它被筹划用于在客户端和服务器之间创建持久毗连,以便实时数据互换。WebSocket 协议在 2011 年被标准化为 RFC 6455。
WebSocket 的特点
- 全双工通讯:客户端和服务器可以同时发送和接收消息。
- 低延迟:由于毗连是持久的,减少了创建毗连的开销,实用于实时应用。
- 基于 TCP:WebSocket 使用 TCP 作为传输层协议。
- 节省带宽:相比于 HTTP 请求,WebSocket 消息头部较小,节省了带宽。
WebSocket 的工作原理
- 握手:客户端通过 HTTP 请求与服务器举行握手,升级协议到 WebSocket。
- 创建毗连:握手成功后,创建持久毗连,客户端和服务器可以相互发送消息。
- 消息通报:客户端和服务器可以通过毗连发送和接收消息。
- 关闭毗连:任一方可以随时关闭毗连。
WebSocket 握手示例
客户端发送的 HTTP 请求
- GET /chat HTTP/1.1
- Host: example.com
- Upgrade: websocket
- Connection: Upgrade
- Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
- Sec-WebSocket-Version: 13
复制代码 服务器相应的 HTTP 相应:
- HTTP/1.1 101 Switching Protocols
- Upgrade: websocket
- Connection: Upgrade
- Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
复制代码 WebSocket 在 JavaScript 中的使用
在欣赏器中使用 WebSocket 非常简单,以下是一个根本的示例:
客户端代码
- // 创建 WebSocket 连接
- const socket = new WebSocket('ws://example.com/socket');
- // 连接打开时触发
- socket.addEventListener('open', (event) => {
- console.log('WebSocket is open now.');
- socket.send('Hello Server!');
- });
- // 接收到消息时触发
- socket.addEventListener('message', (event) => {
- console.log('Message from server:', event.data);
- });
- // 连接关闭时触发
- socket.addEventListener('close', (event) => {
- console.log('WebSocket is closed now.');
- });
- // 连接出错时触发
- socket.addEventListener('error', (event) => {
- console.error('WebSocket error observed:', event);
- });
复制代码 服务器代码(Node.js 示例)
使用 ws 库在 Node.js 中创建 WebSocket 服务器:
- const WebSocket = require('ws');
- const wss = new WebSocket.Server({ port: 8080 });
- wss.on('connection', (ws) => {
- console.log('Client connected');
- ws.on('message', (message) => {
- console.log('Received:', message);
- ws.send('Hello Client!');
- });
- ws.on('close', () => {
- console.log('Client disconnected');
- });
- });
复制代码 WebSocket 的应用场景
- 实时聊天应用:如即时通讯工具和聊天室。
- 实时数据推送:如股票行情、体育比分更新等。
- 在线游戏:需要低延迟的实时通讯。
- 协作工具:如在线文档编辑、白板应用等。
总结
WebSocket 是一种在单个 TCP 毗连上举行全双工通讯的协议,实用于需要实时数据互换的应用场景。它通过握手创建持久毗连,客户端和服务器可以同时发送和接收消息。WebSocket 在欣赏器和服务器端都得到了广泛支持,实用于各种实时应用。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |