我想要用node搭建一个websocket服务器,当客户端连接ws://localhost:8080/:id时使用一套处理逻辑,而连接ws://localhost:8080/:id/connect时为另一套逻辑,其中:id为param参数,如何实现
时间: 2024-10-20 10:03:32 浏览: 36
要在Node.js中实现这样的WebSocket服务器,你可以使用`ws`库,它是一个广泛使用的WebSocket库。首先,安装所需的库:
```bash
npm install ws express
```
接下来,创建一个名为`server.js`的文件,编写以下代码来设置两个不同的路由处理函数,分别对应`:id`和`:id/connect`:
```javascript
const WebSocket = require('ws');
const express = require('express');
const app = express();
// 创建WebSocket服务器
const wss = new WebSocket.Server({ port: 8080 });
// 使用Express解析URL参数
app.use(express.pathParams);
// 针对/ws/:id的连接处理逻辑
wss.on('connection', (ws) => {
const id = ws.path.split('/')[1];
console.log(`Client connected with ID: ${id}`);
// 当接收到消息时,执行相应的处理逻辑
ws.on('message', (message) => {
console.log(`Received message from client with ID ${id}:`, message);
handleMessageForId(ws, id, message);
});
// 关闭连接时打印信息
ws.on('close', () => {
console.log(`Client with ID ${id} disconnected.`);
});
});
// 针对/ws/:id/connect的连接处理逻辑
function handleConnect(ws, id) {
console.log(`Client with ID ${id} is trying to connect`);
ws.send('Connection successful!');
}
wss.on('connection', (ws) => {
if (ws.path === '/connect') {
const id = ws.path.split('/')[1];
handleConnect(ws, id);
}
});
// 监听HTTP请求来区分连接路径
app.get('/ws/:id', (req, res) => {
res.send(`Redirecting to WebSocket...${req.originalUrl}`);
wss.handleUpgrade(req, res, req.socket, function head upgradeToWsProtocol(ws) {
handleConnect(ws, req.params.id); // 如果路径是'/connect',在这里执行连接逻辑
});
});
app.listen(8080, () => {
console.log('Server running on ws://localhost:8080');
});
```
在这个例子中,我们首先通过`express.pathParams`解析URL参数,然后在`wss.on('connection')`事件中检查每个连接的路径。如果路径是`/connect`,我们就直接调用`handleConnect`函数;如果是其他路径,就按照常规处理,并在接收消息时调用自定义的` handleMessageForId`函数。
请注意,这只是一个基础示例,实际应用中可能需要根据业务需求进一步扩展处理逻辑。另外,记得在生产环境中添加错误处理和安全性检查。
阅读全文