1

次の特性を持つ既存の NIO サーバーコードベースを移行しようとしています - セレクターの制御下で接続の受け入れを実行する単一スレッド - ソケットの読み取り/書き込みを実行する複数のスレッド (1 つのスレッド: 1 つのセレクター: 受け入れられた接続の 1 つの SocketChannel)

単一の READ/WRITE スレッドが 1 つのセレクターを持つことができ、複数の受け入れられた SocketChannel が登録および登録解除できるモデルに移行したいと考えています。このようにして、1 つのスレッドが複数の SocketChannel を IO 用に多重化できます。

このモデルは、Boss スレッドが 1 つあり、構成可能なワーカー数があり、ワーカーごとに複数の接続がある Nettyのケースにすぐにマップされることを理解しています。ExecutionHandler は直交しているため、今のところそれを説明していません。

具体的な質問: 私は「Netty」ホイールを再発明していますか、それとも、接続が最大 5000 になる可能性があり、バイナリ プロトコルのメッセージ交換レートが 60 ~ 70K メッセージに達すると予想される、遅延の影響を受けやすいと予想されるサーバーに対する上記のアプローチに違いはありますか? /秒?

言及されている数値は、上記の設計の選択だけではなく、他の要因にも影響されることを理解しています. しかし、より大きな影響はデザインの選択によってもたらされる可能性があります - 少なくともそれは私が信じていることです

前もって感謝します

4

1 に答える 1

0

私はあなたが再発明していると思います。Netty はまさにこれ以上のことを行います。しかし、netty は適切にモジュール化されているため、残りの機能や「手荷物」が必要ない場合は、すべてではなく、netty の個々の Maven サブモジュールを選択することもできます。
ゼロから作成する場合の基本的な問題は、netty が既に解決している問題、プラットフォームの問題、jdk の回避策などに遭遇する可能性があることです。
記録として、netty で記述したサーバーでは上記のメッセージ レート (実際にはそれ以上) を簡単に取得できましたが、4 年前の centrino プロセッサ ラップトップでテストした場合は、クライアント数が少ない (100) 場合でした。
おそらく、netty examples モジュールから例を取り上げ、5000 接続クライアントを作成し、このパスをたどる前にレイテンシがうまくいくかどうかをテストする必要があります。それには数時間しかかかりません。

于 2013-06-28T13:32:50.983 に答える