Nodejs:基于URL的websocket路由,没有端口代理



我试图做一个游戏在html5与服务器端逻辑在node.js,并使用原始的websockets(不是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不支持websockets。

功能路线图页面-页面底部:显示websockets即将到来(即他们不支持)。

相关内容

  • 没有找到相关文章

最新更新