Hyp*_*sis 5 websocket node.js express node-modules
我正在运行一个 nodejs 应用程序,它在我第一次使用时运行良好,但是当我刷新并输入新数据时,Node 崩溃并给了我这个。错误如下所示:
/www/wwwroot/domain.to/node_modules/ws/lib/websocket-server.js:267
throw new Error(
^
Error: server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration
at WebSocketServer.completeUpgrade (/www/wwwroot/domain.to/node_modules/ws/lib/websocket-server.js:267:13)
at WebSocketServer.handleUpgrade (/www/wwwroot/domain.to/node_modules/ws/lib/websocket-server.js:245:10)
at Server.upgrade (/www/wwwroot/tehran.us.to/node_modules/ws/lib/websocket-server.js:89:16)
at Server.emit (events.js:327:22)
at onParserExecuteCommon (_http_server.js:646:14)
at onParserExecute (_http_server.js:587:3)
Run Code Online (Sandbox Code Playgroud)
Express 的服务器上的代码如下所示:
const app = express();
const options = {
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
};
const server = https.createServer(options, app)
server.listen(3000, function () {
console.log("Express server listening on port " + 3000);
});
Run Code Online (Sandbox Code Playgroud)
我也在同一个端点上使用 Websocket,代码如下所示:
const wss = new Websocket.Server({ server })
console.log(url)
wss.on('connection', ws => {
console.log('user is connected to the server #mainpage')
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决它,因为应用程序似乎没有为新的刷新创建应用程序的新实例。
我该如何处理这个问题并使我的应用程序持续运行?
Goo*_*ian 15
这是因为您已经使用创建了服务器express,并且handleUpgrade在内部调用了该方法express,因此您需要通知您的WebSocket服务器忽略服务器启动部分并继续使用现有资源,给出的选项如下{ noServer: true }
const wss = new WebSocket.Server({ noServer: true });
server.on('upgrade', function (request, socket, head) {
wss.handleUpgrade(request, socket, head, function (ws) {
wss.emit('connection', ws, request);
})
})
Run Code Online (Sandbox Code Playgroud)
小智 1
嗯,在我的项目中,我使用的是express-monitor,它也使用了socket.io,因此导致服务器处理ws连接请求的升级以及socket.io初始化。
删除 Express-Monitor 解决了这个问题