2

node.js のサーバー側ロジックを使用して html5 でゲームを実行しようとしていますが、それは生の 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 サーバーに渡す方法があるのではないでしょうか?

私はサーバー側のものにはかなり慣れていないので、あちこちで追加情報を歓迎します.

4

1 に答える 1

1

残念ながら、Appfog は WebSocket をサポートしていません。

機能ロードマップ ページ- ページの下部: Websocket が近日公開予定として表示されます (つまり、サポートされていません)。

于 2013-10-25T19:01:12.553 に答える