【问题标题】:How to deal with server.handleUpgrade() was called more than once in Nodejs?如何处理在 Nodejs 中多次调用 server.handleUpgrade()?
【发布时间】:2020-12-12 14:25:22
【问题描述】:

我正在运行一个 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)

服务器上的代码对于 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);
});

我也在同一端点上使用 Websocket,代码如下所示:

const wss = new Websocket.Server({ server })
    console.log(url)
    wss.on('connection', ws => {
        console.log('user is connected to the server #mainpage')

我不知道如何解决它,因为应用程序似乎没有为新的刷新创建应用程序的新实例。

我该如何处理这个问题并让我的应用持续运行?

【问题讨论】:

  • 面临同样的问题,我正在使用 socket.io
  • 任何解决方案?
  • 同样的问题,其他人有这个吗?

标签: node.js express websocket node-modules


【解决方案1】:

这是因为您已经使用express 创建了服务器,并且在express 内部调用了handleUpgrade 方法,因此您需要通知您的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);
  })
})

【讨论】:

    【解决方案2】:

    好吧,在我的项目中,我使用的是 express-monitor,它也使用了 socket.io,因此导致服务器处理 ws 连接请求的升级以及 socket.io 初始化。

    删除 express-monitor 解决了这个问题

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 2019-09-22
      • 2022-01-09
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2016-07-06
      • 2014-04-10
      • 2022-12-03
      相关资源
      最近更新 更多