0

理論的には、レイジー ソケットを使用するサーバー (またはアプリ) を構築するにはどうすればよいでしょうか? 私は、JSON 交換を介してすべてのデータを中央の API のようなサーブレットに移動する Web アプリを想定しています。すべてのデータを転送した後、HTTP 接続を開いたままにして、クライアントにさらに書き込むことができます。これは一種の遅延プッシュ テクノロジです。ブラウザは、タイムアウトによってソケットが閉じられた後に再接続することもできました。

そのモデルを調べて、指数関数的なスレッド分岐によって大量のメモリを消費しない方法でアプリを作成するにはどうすればよいでしょうか? 各スレッドは 1 つまたは複数の接続を処理しますか? それぞれが送信する新しいデータをどのように発見するのでしょうか? -- おそらく、各スレッドが独自に積極的にデータを検索するのではなく、スレッド間の対話が必要になるでしょうか? x+1 個の子スレッドを生成する親スレッドを作成した場合、各スレッドはクライアントと 1:1 または many:1 になりますか? デッドロックの問題が発生する可能性はありますか? 追加の各接続ハンドラのメモリ フットプリントはどれくらいですか?

誰もこれについて考えていますか?実際よりも理論的にはどうなるのだろうと思っています。

4

2 に答える 2

2

いくつかのソケットを開き、select()orpoll()を使用して、オペレーティング システムに処理が必要なソケットを見つけさせることができます。この方法では、任意の数のソケットを処理するために必要なスレッドは 1 つだけです。読み取り/書き込みは、オペレーティング システムが使用可能なデータ/バッファー スペースがあることを通知した場合にのみ、ノンブロッキングで実行されます。

于 2009-11-24T06:18:30.500 に答える
1

Twistedをご覧になることをお勧めします。非同期IOを処理する単一のプロセスと複数のワーカープロセスを使用する軽量のアプローチを使用します。ワーカーはファイルとデータベースの呼び出しをブロックできるため、スレッド化されたワーカーで同期を維持する方が簡単です。開いているソケットの大部分は、非同期IOを使用して単一の親スレッドで処理できます。

于 2009-11-24T06:19:41.747 に答える