Node.js Express.js vhost子域上的Socket.IO

Node.js Express.js vhost子域上的Socket.IO,node.js,express,socket.io,connect,Node.js,Express,Socket.io,Connect,我的服务器上运行了两个Express.js应用程序 一个普通的应用程序称为“主应用程序”,另一个使用Socket.IO的应用程序称为“Socket应用程序” 我在“mydomain.com”上运行“main app”,在“socket.mydomain.com”的子域上运行“socket app” 我通过Express的内置vhost中间件将请求路由到socket应用程序 --在main-app.js中-- 这工作正常,我可以看到我的socket应用程序在socket.mydomain的8080

我的服务器上运行了两个Express.js应用程序

一个普通的应用程序称为“主应用程序”,另一个使用Socket.IO的应用程序称为“Socket应用程序”

我在“mydomain.com”上运行“main app”,在“socket.mydomain.com”的子域上运行“socket app”

我通过Express的内置vhost中间件将请求路由到socket应用程序

--在main-app.js中--

这工作正常,我可以看到我的socket应用程序在socket.mydomain的8080端口上运行

但是,在通过vhost运行Socket.IO应用程序时,WebSocket超时和未接收到“升级”事件似乎存在问题,如前所述

所以我的问题是,我如何将这个“升级”事件从我的主应用程序传输到我的套接字应用程序,以便在有人连接和断开连接时,所有连接的套接字都能听到

我尝试过从“主应用程序”中发出“升级”事件,但它似乎不起作用

app.on('upgrade', function(req, socket) {
    socket.emit('upgrade', app);    
});

我在这里遗漏了什么?

解决方案是在根应用程序中创建一个Socket.IO实例,子域应用程序可以全局访问该实例,然后在其自己的Socket.IO命名空间中运行每个应用程序以保持其自主权

我刚刚构建了一个应用程序,它运行聊天应用程序的三个实例,所有实例都共享同一个Socket.IO实例,该实例在根应用程序中声明

如果您选择并按照说明设置本地子域,您可以看到聊天应用程序的每个实例独立于其他实例运行

明天早上,我将尝试写一篇博客文章,详细介绍它的工作原理

更新


所以我拿到了。由于Socket.IO和Express.vhost似乎不想很好地配合使用,因此解决方案似乎是在主应用程序中创建一个Socket.IO实例,然后将该实例传递到需要通过sockets进行通信的其他应用程序中。我会在我的博客上写一个例子。太棒了!你也可以发布一个快速回答你的问题并接受它吗?看见
app.on('upgrade', function(req, socket) {
    socket.emit('upgrade', app);    
});