当前位置:实例文章 » HTML/CSS实例» [文章]用 Node.js 手写 WebSocket 协议

用 Node.js 手写 WebSocket 协议

发布人:shili8 发布时间:2025-02-15 07:47 阅读次数:0

**Node.js 中的手写 WebSocket 协议**

WebSocket 是一种在客户端和服务器之间进行实时通信的协议。它允许双方在连接建立后,通过 TCP 连接进行双向数据传输。下面我们将手写一个简单的 WebSocket服务器和客户端。

### WebSocket 协议概述WebSocket 协议基于 TCP 协议,使用 HTTP 升级来建立连接。升级过程中,客户端和服务器之间会交换一些元数据,以便双方可以确定是否支持 WebSocket 协议。

**WebSocket 协议握手过程**

1. 客户端发送一个 HTTP 请求到服务器,请求 URL 为 `/ws`,方法为 `GET` 或 `WS`,头部中包含 `Upgrade: websocket` 和 `Connection: Upgrade` 等关键信息。
2.服务器接收到客户端的请求后,如果支持 WebSocket 协议,则会返回一个 HTTP 响应,状态码为101 Switching Protocols,表示协议升级成功。响应头部中包含 `Upgrade: websocket` 和 `Connection: Upgrade` 等关键信息。
3. 双方完成握手过程后,可以通过 TCP 连接进行双向数据传输。

### Node.js 中的 WebSocket服务器下面是使用 Node.js 手写一个简单的 WebSocket服务器的示例代码:

javascriptconst http = require(' />const WebSocket = require('ws');

// 创建 HTTP服务器const server =  res) => {
 // 如果请求 URL 为 /ws,则升级为 WebSocket 协议 if (req.url === '/ws') {
 res.writeHead(101, { 'Upgrade': 'websocket', 'Connection': 'Upgrade' });
 res.end();
 } else {
 res.writeHead(404);
 res.end('Not Found');
 }
});

// 创建 WebSocket服务器const wss = new WebSocket.Server({ server });

// 监听 WebSocket 连接事件wss.on('connection', (ws) => {
 console.log('客户端连接成功');

 // 监听 WebSocket 消息事件 ws.on('message', (message) => {
 console.log(`收到消息:${message}`);
 // 回复消息给客户端 ws.send(message);
 });

 // 监听 WebSocket 错误事件 ws.on('error', (error) => {
 console.error('WebSocket 错误:', error);
 });

 // 监听 WebSocket 关闭事件 ws.on('close', () => {
 console.log('客户端连接关闭');
 });
});

// 启动 HTTP服务器server.listen(3000, () => {
 console.log('HTTP服务器启动成功,监听端口:3000');
});


### Node.js 中的 WebSocket 客户端下面是使用 Node.js 手写一个简单的 WebSocket 客户端的示例代码:

javascriptconst WebSocket = require('ws');

// 创建 WebSocket 连接const ws = new WebSocket('ws://localhost:3000/ws');

// 监听 WebSocket 连接事件ws.on('open', () => {
 console.log('连接服务器成功');
});

// 监听 WebSocket 消息事件ws.on('message', (message) => {
 console.log(`收到消息:${message}`);
});

// 监听 WebSocket 错误事件ws.on('error', (error) => {
 console.error('WebSocket 错误:', error);
});

// 监听 WebSocket 关闭事件ws.on('close', () => {
 console.log('连接服务器关闭');
});

// 发送消息给服务器ws.send('Hello, Server!');


上述示例代码中,我们使用 Node.js 的 ` 和 `ws` 模块分别创建了一个 HTTP服务器和 WebSocket服务器。客户端通过 WebSocket 连接向服务器发送消息,并监听服务器回复的消息。

**注意事项**

* 在生产环境中,建议使用成熟的 WebSocket 库,如 `ws` 或 `uWebSockets` 等。
* WebSocket 协议握手过程中,需要正确处理 HTTP 升级和 TCP 连接建立等细节。
* WebSocket 客户端和服务器之间的通信可能会受到网络延迟、丢包等问题的影响。

通过上述示例代码,我们可以看到 Node.js 中的手写 WebSocket服务器和客户端是相对简单的。然而,在实际应用中,需要考虑到协议握手过程中的细节以及网络环境的复杂性。

其他信息

其他资源

Top