Nodejs: маршрутизация веб-сокетов на основе URL без проксирования портов

Я пытаюсь сделать игру в html5 с логикой на стороне сервера в node.js и использовать необработанные веб-сокеты (не Socket.IO, мне нужны двоичные данные). Я хочу иметь несколько «комнат», то есть несколько серверов веб-сокетов, каждый из которых имеет отдельные URL-адреса. В настоящее время я нашел только способ подключить каждый сервер веб-сокетов к определенному порту, а затем проксировать запросы на обновление (не совсем уверен, как это работает) на правильный порт на основе 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". 

Мой вопрос: возможно ли как-то открывать серверы веб-сокетов, не прослушивая какие-либо определенные порты, и вручную подключать к ним сокеты, чтобы мне не нужно было открывать какие-либо порты, кроме основного http-порта? Я знаю, что Socket.IO как-то это делает. Может быть, есть способ прослушать событие обновления http-сервера и передать сокет на правильный сервер веб-сокетов?

Я довольно новичок в серверных вещах, поэтому дополнительная информация здесь и там будет приветствоваться.


person Zelenova    schedule 07.05.2013    source источник


Ответы (1)


К сожалению, Appfog не поддерживает веб-сокеты.

Страница плана развития функций — нижняя часть страницы: показывает веб-сокеты как нечто, что скоро появится (т. е. они не поддерживают Это).

person Tracy    schedule 25.10.2013