如何使用 Socket.io v2 手动处理“升级”事件

Coo*_*J86 6 socket.io ws

我正在将一个预先存在的项目从 Socket.io (socket-io / socketio) 转换为普通的 Websockets,我想在转换期间并排运行这两个项目

我希望做什么

'use strict';

var app = require('express')();
var server = require('http').createServer(app);
var ws = require('ws');
var wss = new ws.Server({ noServer: true })
var io = require('socket.io')({ path: '/api/socket.io' });

server.on('upgrade', function upgrade(req, socket, head) {

    if ('/api/ws' === req.url) {
      wss.handleUpgrade(req, socket, head, function (ws) {
        wss.emit('connection', ws, req);
      });
    } else if ('/api/socket.io' === req.url) {
      io.XXXXX() // ??? <=== MISSING DOCUMENTATION FOR THIS
    } else {
      socket.destroy();
    }

});

// ... handle connections, listen on port 3000, etc
Run Code Online (Sandbox Code Playgroud)

以前的解决方案

ws很好的文档展示了如何使用upgrade标头以基于标准的方式做到这一点:

我还找到了一篇关于如何以 Socket.io 专有的方式进行操作的帖子:

我什至找到了一个关于如何将两者与非常非常旧版本的 Socket.io 混合在一起的旧参考:

但我不清楚如何将 Socket.io v2s 专有/私有内部实现方式与ws标准头升级技术混合使用。

是否可以只使用老式upgrade事件?如果不是,那么处理两者竞争的新策略是什么?

似乎我将能够弄清楚如何处理对每个成功的请求,但最令人费解的部分是如何拒绝两者都不处理的请求。