2011-06-17 60 views
1

サーバーに接続するためのTCP接続をオープンしていますが、net.createConnection(port, host)を何度も呼び出さなくてもそのソケットをオープンにする方法が必要です。node.jsでtcpソケットを開いたままにしておきます

私が実装しようとしているのは、複数の接続を受け入れ、上記のように1つのソケットを通して要求を送るソケットサーバーです。次に、応答を正しいソケットに送る必要があります。しかし、私が抱えている唯一の問題は、私がリッスンしているサーバーコードの外に作成しようとしているオープンソケットを維持することです。私はソケットを作成するためにSingletonパターンとそれに近づいてきました

は...

var Singleton = (function() { 

     var socket = null; 

     function connectToHost(port, host) { 
      socket = net.createConnection(port, host); 
      return socket; 
     } 

     return { 
      connectToHost: connectToHost 
     }; 
})(); 

しかし、私が見ることができるものから

、イベント(「終了」)にそのソケットは、もはや書き込み可能ではありません。ソケットを再接続した場合。

socket.on('end', function() { 
    socket = Singleton.connectToHost(port, host); 
}); 

イベント( 'end')でも同じことが起こります。

1つのソケット接続を作成して保守するにはどうすればよいですか?

+0

あなたが何を求めているのか分かりません。ソケットはポイントツーポイント接続です。接続ごとに1つずつ持っていなければならず、データが混在することはありません。 –

+0

はい、それは正しいですが、私がしようとしているのは、複数のソケットをサーバーに接続し、各ソケットから別のサービスにリクエストを送る必要があることです(ただし、ここでは1つのソケットしか開くことができません)。サービスからの応答を受け取ったら、正しいソケットに戻す必要があります。これは、私が正しいソケットに応答をマップする必要がある場所です! – vitez

+0

私は自分のサービスに接続する任意のソケットにリスティングしていますが、別のサーバーで開くために必要な1つのソケット接続に各要求を送る必要があります。これは私が問題を抱えているビットで、そのサーバーへの1つの接続を開いたままにしておくことです。着信トラフィックは問題ありません。 詳細情報が必要な場合はお知らせください。 ありがとうございます。 – vitez

答えて

0

サーバの前にmux/demux(マルチプレクサ/デマルチプレクサ)を置いて、フロントエンドが適切に応答を返すように応答するように思えます。

これをサポートするためにTCPには何もありませんので、あなた自身で書くか、すでに書かれているものを見つける必要があります。 http://www.google.com/search?q=tcp+multiplexer

このリンクは有望に見える:http://sourceforge.net/projects/tcpmultiplexer/

(あなたはポート#1の「TCPMUX」と探しているものを混同しないでください。それは全く違うのです。)

1

これに遅れて応答。

私はあなたの質問を正しく理解している場合、このようなことをしようとしていますか? net Node.js v.0.12.0 documentation

にAccroding

socket.on('close', function() { 
    socket.connect(port, host); 
}); 

それはうまくいくかもしれないが、それはかなりひどく、サーバーをハンマーますので、setTimeoutが賢明かもしれません。

私はあなたが最後に結局何をしたのが不思議ですか?

関連する問題