您好,我尝试创建一个具有多个路径的websocket服务器类。
当我使用有效路径调用websocket服务器时,会发出连接事件。但是消息事件永远不会发出。当我使用代码示例时,我没有任何问题,但是我的类没有发生任何事情,只有连接事件。我不明白为什么..。
感谢你的帮助
WebSocket服务器类
const http = require('http');
const WebSocket = require('ws');
const url = require('url');
class WSServer {
#server;
#wsServer = {};
#ip;
#port;
#origin;
#routes = {};
constructor(ip, port, origin = null, routes = ['/']) {
this.#ip = ip;
this.#port = port;
this.#origin = origin;
this.#routes = routes;
this.#server = http.createServer((request, response) => {
console.log((new Date()) + ' Received request for ' + request.url);
response.writeHead(404);
response.end();
});
this.#routes.forEach(route => {
this.#wsServer[route] = new WebSocket.Server({ noServer: true });
})
this.#server.listen(this.#port, this.#ip, () => {
console.log((new Date()) + ' Server is listening on port ' + this.#port);
});
this.#server.on('upgrade', (request, socket, head) => {
const pathname = url.parse(request.url).pathname;
console.log(pathname);
this.#routes.forEach(route => {
if (pathname === route) {
this.#wsServer[route].handleUpgrade(request, socket, head, (ws) => {
this.#wsServer[route].emit('connection', ws, request);
});
} else {
socket.destroy();
}
});
});
}
clients(route = '/') {
return this.#wsServer[route].connections;
}
on(route = '/', event, func) {
this.#wsServer[route].on(event, func);
}
}
module.exports = WSServer;代码示例
const WSServer = require('./WSServer');
const wsServer = new WSServer('localhost', '7070', null, ['/db', '/']);
wsServer.on('/', 'connection', function test(conn, req) {
conn.on('message', msg => {
console.log(msg);
})
});
wsServer.on('/db', 'connection', function test(conn, req) {
conn.on('message', msg => {
console.log(msg);
})
});发布于 2021-01-05 21:23:26
问题解决了!
错误来自onupgrade http服务器事件中的路由循环...
改正
if (this.#wsServer[pathname] !== undefined) {
this.#wsServer[pathname].handleUpgrade(request, socket, head, (ws) => {
this.#wsServer[pathname].emit('connection', ws, request);
});
} else {
socket.destroy();
}https://stackoverflow.com/questions/65576866
复制相似问题