1

現在、ユニキャスト チャット サーバー モデルを作成しています。フローは次のようになります。

  • 送信者はチャット サーバーにメッセージを送信します。メッセージでは、サーバーはメッセージの受信者 ID も指定します。
  • チャット サーバーは、受信者 ID に基づいてメッセージを適切なクライアントにルーティングします。

Python 標準ライブラリ asyncore を使用してチャット サーバー モデルを実装しました。クライアントがサーバーに接続すると、CPU が上昇することがわかりました (1% 対 24%)。handle_write 関数のループによってパフォーマンスが制限されていると思います。

チャット サーバーの要件を満たすための、より優れた (たとえば、より効率的な) フレームワークはありますか?

前もって感謝します

4

2 に答える 2

2

もちろん、問題をデバッグするには実際のコードが必要です。しかし、あなたが主に求めているのは次のとおりです。

チャットの実装を達成するためのより良い (より効率的な) フレームワークはありますか?

はい。それは一般的に受け入れられていasyncoreます。使いづらい上に効率が悪い。特にWindowsではひどいので、Windowsでは特に悪いselectです。

したがって、はい、別のフレームワークを使用すると、おそらく状況が改善されます。

残念ながら、SO の質問はフレームワークの推奨事項を得るのに適した場所ではありませんが、通常の容疑者のリストを捨てることができます: twistedmonoclegeventeventlettulip

または、数十以上のクライアントへのスケーラビリティについて心配する必要がない場合は、クライアントごとに 1 つのスレッド (または読み取り用に 1 つと書き込み用に 1 つの 2 つのスレッド) を使用し、I/O をブロックする、小規模でのパフォーマンスについてのみです。は信じられないほど簡単です。

最後に、Python 3.x を最新の状態に維持している場合、3.4 には、より効率的で使いやすい新しい改良された非同期 I/O モジュールが含まれる可能性が高くなりますasyncore(そして、ほぼ確実にに基づくtulip)。だから…タイムマシンを手に入れて、数ヶ月先に進むのが最善の解決策かもしれません。(または、将来この回答を探している読者の場合は、IPCの下の標準ライブラリを調べて、どのモジュールが新しく改善された非同期 I/O モジュールであるかを推測してください。)

于 2013-03-19T23:12:40.470 に答える
1

異なるpython Webサーバー間の効率について話しているWebから読んだところです(Link)。

gevent は非常に効率的 (らしい) であるため、使用すると思います。

于 2013-03-20T02:48:06.837 に答える