[解決済み] NettyとApache MINAの比較
質問
両者はほぼ同じ機能を提供します。高性能なTCPサーバーを開発するには、どちらを選ぶべきでしょうか?また、長所と短所は何ですか?
参考リンク
解決方法は?
MINAとNettyは、同じような志を持っていますが、実際にはかなり異なるので、よく考えて選択する必要があります。私たちは幸運にも、MINAで多くの経験を積んだ後、Nettyで遊ぶ時間を持つことができました。NettyはAPIがすっきりしていて、ドキュメントも充実している。性能面でも優れているように思えました。さらに重要なことは、Trustin Leeがどんな質問にも答えてくれるということです。
Nettyの方がすべてが簡単だと思いました。その通りです。MINAですでに持っていたのと同じ機能を再実装しようとしたのですが、ゼロからやり直しました。優れたドキュメントとサンプルに従うことで、より多くの機能をより少ないコードで実現することができた。
Netty Pipelineは、私たちにとってより効果的でした。すべてがハンドラで、上流のイベントを処理するか、下流のイベントを処理するか、両方を処理するか、もっと低レベルのものを消費するかは、あなた次第なのです。デコーダーの再生でバイトを消費するのは、ほとんど快感でした。また、パイプラインをオンザフライで簡単に再設定できるのも非常に素晴らしいことでした。
しかし、Nettyの最大の魅力は、quot;coverage of one"でパイプラインハンドラを作成できることだと思います。このカバレッジアノテーションについては、すでにドキュメントで読んだことがあると思いますが、基本的には1行のコードでステートを提供します。セッションマップや同期といった面倒なことをせず、通常の変数(例えば "username")を宣言して使うだけでいいんです。
しかし、そこで一つの壁にぶつかりました。私たちはすでにMINAでマルチプロトコルのサーバーを持っていて、アプリケーションのプロトコルはTCP/IP、HTTP、UDPで動作していた。Nettyに乗り換えたら、SSLとHTTPSが数分でリストに追加されたのです ここまではよかったのですが、UDPになったとき、私たちは失敗したことに気がつきました。MINAは、UDPをquot;connected"プロトコルとして扱えるという点で非常に親切だった。Nettyでは、そのような抽象化はありません。UDPはコネクションレスであり、Nettyはそれをそのように扱います。Nettyは、MINAよりも低いレベルでUDPのコネクションレス性をより多く公開している。Nettyの下では、MINAが提供する高水準の抽象化ではできないが、私たちが依存していたUDPでできることがある。
UDPのラッパーを追加したりするのは、そう簡単なことではありません。時間の制約もあり、また、Trustinのアドバイスで、Nettyに独自のトランスポートプロバイダを実装するのがベストだが、それはすぐにはできないとのことで、結局Nettyは断念せざるを得なかった。
ですから、両者の違いをよく見て、トリッキーな機能が期待通りに動くかどうかをテストできる段階まで早く持っていくことです。もし、Nettyで十分だと思うのであれば、私は迷わずMINAよりNettyを選びます。MINAからNettyに移行する場合も同様ですが、2つのAPIは大きく異なるので、Netty用に仮想リライトすることを検討したほうがいいでしょう。
関連
-
エラー java.util.NoSuchElementException
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
Javaエラーメッセージがenclosingクラスでない
-
JSPで「リストが型解決できない!」の解決方法
-
[解決済み】Apache Camelとは一体何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラー java.util.NoSuchElementException
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
をインスタンス化することができません。
-
Javaクラスローダーにソースコードから潜り込む
-
プロローグでのコンテンツは禁止されています
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
ローカルリソースのロードが許可されていない場合の解決策