6

我正在将一个预先存在的项目从 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

以前的解决方案

ws具有出色的文档,准确地显示了如何使用upgrade标头以基于标准的方式执行此操作:

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

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

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

是否可以只使用老式upgrade事件?如果没有,应对两者竞争的新策略是什么?

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

4

0 回答 0