1

Netty を使用したクイズ サーバーの実装に関する理論的なアドバイスを探しています。サーバーの 3 つの主要な要件は次のとおりです。

  • サーバーは権限があり、クイズの進行を制御します。たとえば、ユーザーはクイズに参加するために登録します (部屋/ロビーなど)。準備が整うと、サーバーは質問を進め、一定の時間が経過するか、全員が回答すると次の質問に進みます。

  • ユーザーは質問に答えるのに 10 秒かかります。質問に答えるのにかかる時間と残りの時間は、クイズにとって重要です。クイズに参加するユーザーは、地理的に多様です (つまり、WAN リンクを介して)。

  • たとえば、クイズには 10 の質問と 30 人のユーザーがいて、次のクイズには 100 の質問と 1 万のユーザーがいるかもしれません。

Netty はこれに適したソリューションでしょうか? Netty に関する良い本はありますか? Amazon で Kindle 本が見当たりませんでした。2番目のポイント(特に、遅延/送信時間を考慮したタイムクリティカルなクライアント/サーバーの例)に関するアドバイスやサンプルを提供できる人はいますか?

4

1 に答える 1

3

残念ながら、私は netty に関する本をまったく知りませんが、JavaDocs と例を含むオンライン ドキュメントは非常に優れています。以下にいくつかの例を示します。

  • 何千もの同時ユーザー/接続にサービスを提供したい場合は、ノンブロッキング I/O が唯一の選択肢です。Java (および OS) は、I/O をブロックするために必要な数千のスレッドを効果的に処理しません。netty は、それほど多くのスレッドを作成せずに実行できます。

  • netty は、基礎となるプロトコル (TCP/IP または UDP) と同じくらい優れています。ネットワーク遅延を回避することはできません。たとえば、米国からヨーロッパにパケットを送信するには、約 150 ミリ秒かかります。

  • タイミングが非常に重要な場合は、何らかの方法でクロックを同期するか、中央のタイム ソースを使用する必要があるかもしれません。をチェックアウト

  • プロトコルがサーバーとどのように対話するかを決定する必要があります。

    • ユーザーが質問をアップロードしたり、新しい質問を取得したりするたびに確立される短い要求/応答接続- を考えてください。これは非常に遅くなりますが、非常に信頼性が高くなります (長期にわたる接続が中断されることを心配する必要はありません)。

    • ユーザーごとに 1 つの接続を確立し、クイズ全体を通して持続します。これにより待ち時間が最小限に抑えられますが、切断された接続と再接続を手動で処理する必要があります。

    • ハイブリッド アプローチ -オプションでプロトコルをKeep-alive選択

  • netty では、バイト配列のコピー ( ChannelBuffer/ByteBufはかなり得意です) を避け、大量のゴミを作成します。

  • netty ワーカー スレッドでの I/O 操作のブロックを回避します。使用されているワーカー スレッドの数を監視し、複雑なイベントのキューイングを回避します。

于 2012-08-24T16:24:22.943 に答える