0

Socket.ioを使用して2つの異なるNode.jsサーバーを接続しようとしています。cloudfoundryを使用してSocket.io-clientを接続しようとしています。両方のインスタンスをローカルで実行してコードをテストすると、以下のsocket.io-clientNode.jsコードが期待どおりに機能します。socket.ioサーバーがcloudfoundryの場合、ブラウザーの単純なjavascriptクライアントが接続でき、正常に動作します。ただし、socket.io-client Node.jsを使用してcloudfoundryで実行されているインスタンスに接続しようとすると、いくつかの異なる方法で失敗します。何もしないか、2回接続を試みてから失敗するか、接続してすぐに切断するだけです。

私が考えることができる唯一のことは、cloudfoundryのnginxが何かを壊しているということです。ブラウザのjavascriptクライアントが接続してデータを送受信できるのに対し、Webブラウザと同じマシンから実行される基本的に同じNode.jsコードが接続できないことは、私には意味がありません。何かアイデアがありますか、それともcloudfoundryから離れるべきですか?

var socketioclient = require('socket.io-client').connect('http://someapiaddress.cloudfoundry.com');

socketclient = socketioclient.socket;
socketclient.on('connect_failed', function(){
    console.log('Connection Failed');
});

socketclient.on('connecting', function(){
    console.log('connecting')
});

socketclient.on('connect', function(socket) {
    console.log('Connected!');

    socketclient.on('message', function(data){
       console.log(data)
    });
    socketclient.on('disconnect', function(){
       console.log('disconnect')
 });

});

4

1 に答える 1

0

はい、nginx複数のサーバー インスタンスを実行していて、毎回リクエストをインターセプトし、異なるサーバー インスタンスに socket.io リクエストを送信している場合、問題が発生します。これが、さまざまなエラーが発生する理由です。

  1. 何もしない、
  2. 接続を 2 回試行してから失敗する、または
  3. すぐに切断するためだけに接続します。

sticky sessionsこれに対処するには、と呼ばれるものを使用する必要があります。問題を説明し、解決策を提供するこのリンクを参照してください。

于 2013-03-12T18:22:02.053 に答える