2012-02-27 5 views
2

私は現在、サーバに接続するクライアントごとに別のソース(basic.lineReceiver)への接続を確立するツイストプロジェクトを開発中です。接続ごとに別のスレッド?

応答チェーンは次のようになります。

クライアントが接続している - >クライアントメッセージIDをサーバに - >サーバーは、カスタムソース接続を確立します - >サーバーは、継続的にソースからの着信メッセージとデータを生成 - >サーバーは、継続的にデータをブロードキャストクライアント - 1:それぞれのクライアント

ソースに1関係

私の推測では、新しいスレッドへのすべてのソース接続を派遣して、着信メッセージをリッスンすることです。非常に多くのように:

Producing content indefinitely in a separate thread for all connections?

それが開始された後にどのように私はツイストの新しいスレッドで原子炉を持つそれぞれの新しい接続を派遣でしょうか?

+1

"接続ごとに1スレッド"のサーバーでは、中程度の同時接続(たとえば30回)の場合でもパフォーマンスが低下します。原子炉パターンはこの問題の解決策の1つです。そのため、ねじれが起こるのを許してしまうのではないでしょうか。 –

+0

一度に10を超える同時接続はありません。 –

+0

私は1:全てのリレーションに切り替えて、自分でフィルタリングしてもよいでしょう。問題はまだあります:新しいコネクション(basic.lineReceiver)をスレッドにリアクタと共にディスパッチする方法です。 –

答えて

1

ここの糸は赤いニシンです。あなたが望むのは、多くの(あるいは少なくともいくつかの)接続をプロキシすることです。いろいろな方法でこれを行うことができますが、もしTwistedでそれをやろうとすれば、スレッドを含む方法をスキップすることもできます。

the existing forwarder in Twistedを参照して、これがどのように行われるかについてのアイデアを入手してください。

一般的な考え方は、Twistedを使用して発信接続を設定し、その発信接続からデータを読み取るたびにデータでコールバックを受信できることです。その後、着信接続を介してそのデータを送り返すことができます。 TwistedはI/Oを処理し、すべてのコードを単一のスレッド( "reactor thread")で呼び出すので、余分なスレッドは必要ありません。

+0

出発点をありがとう、私はすぐに潜水するでしょう。 –

関連する問題