Node.js Nodejs:基于URL的websocket路由,无需端口代理

Node.js Nodejs:基于URL的websocket路由,无需端口代理,node.js,url,websocket,appfog,paas,Node.js,Url,Websocket,Appfog,Paas,我正在尝试用html5做一个游戏,在node.js中使用服务器端逻辑,并使用原始WebSocket(不是Socket.IO,我需要二进制数据)。我希望有多个“房间”,因此有多个websocket服务器,所有服务器都有单独的URL。目前,我只找到了一种方法,将每个websocket服务器连接到一个特定的端口,然后根据url将升级请求(不完全确定它是如何工作的)代理到正确的端口 它在我的电脑上工作。问题是,当我尝试将其提交给PaaS提供程序(AppFog)时,代码失败,因为它们不允许打开提供的htt

我正在尝试用html5做一个游戏,在node.js中使用服务器端逻辑,并使用原始WebSocket(不是Socket.IO,我需要二进制数据)。我希望有多个“房间”,因此有多个websocket服务器,所有服务器都有单独的URL。目前,我只找到了一种方法,将每个websocket服务器连接到一个特定的端口,然后根据url将升级请求(不完全确定它是如何工作的)代理到正确的端口

它在我的电脑上工作。问题是,当我尝试将其提交给PaaS提供程序(AppFog)时,代码失败,因为它们不允许打开提供的http端口以外的任何端口

下面是我的代码的一个非常清晰的版本:

//start web server (basic static express server) on 8080
//    ...


//start game server and listen to port 9000
//   I use the ws module for websockets
// I plan to have a couple of these "game servers"
//    ...


//open the proxy server.

var httpProxy= require('http-proxy');

var webProxyServer = httpProxy.createServer(function (req, res, proxy){

   // I need http requests to be redirected to the "game servers"

   if(req.url.substring(0, "/room1".length) === "/room1") // if starts with "/room1"

      proxy.proxyRequest(req, res, {
         host: 'localhost',
         port: 9000
      });


   else

      proxy.proxyRequest(req, res, {
         host: 'localhost',
         port: 8080
      });

}

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

   //redirecting logic goes here

   if(req.url=="/room1/"){

      webProxyServer.proxy.proxyWebSocketRequest(req, socket, head, {
         host: 'localhost',
         port: 9000
      })
   }

});


webProxyServer.listen(8000);  //the "outside port". 
我的问题:是否有可能在不监听任何特定端口的情况下打开websocket服务器,并手动将套接字连接到服务器上,这样我就不需要打开基本http端口以外的任何端口?我知道Socket.IO是怎么做到的。也许有一种方法可以侦听http服务器的升级事件并将套接字传递到正确的websocket服务器


我对服务器端的东西还很陌生,所以这里和那里的额外信息都很受欢迎。

不幸的是,Appfog不支持WebSocket

-页面底部:将WebSocket显示为即将出现的内容(即它们不支持它)