16

どの時点で java.net から java.nio に切り替えるのがよいでしょうか? .net (Microsoft エンティティではない) は理解しやすく親しみやすいのに対し、nio はスケーラブルであり、いくつかの気の利いた機能を備えています。

具体的には、この状況に対して選択を行う必要があります。複数のリモート サイトでハードウェアを管理する 1 つのコントロール センターがあります (各サイトには、複数のハードウェア ユニット (トランシーバ、TNC、およびローテータ) を管理する 1 台のコンピュータがあります)。私のアイデアは、コントロール センターから無線ハードウェアへのゲートウェイとして機能するサーバー アプリを各マシンに作成し、各ユニットに 1 つのソケットを用意することでした。私の理解では、NIO は 1 つのサーバー、多数のクライアントを対象としていますが、私が考えているのは 1 つのクライアント、多数のサーバーです。

3 番目のオプションは MINA を使用することだと思いますが、それが単純な問題を投げかけすぎているかどうかはわかりません。


各リモート サーバーには、すべて同じクライアントからの最大 8 つの接続があります (すべてのハードウェアを制御し、TX/RX ソケットを分離するため)。ただし、単一のクライアントは一度に複数のサーバーに接続する必要があります。各サーバーを異なるポートに配置する代わりに、クライアント側でチャネルセレクターを使用することは可能ですか、それともクライアント側でマルチスレッド io を使用してサーバーを別の方法で構成する方がよいでしょうか?


実際、リモート マシンは他のハードウェアと対話するためだけに機能するため、RMI または IDL/CORBA のほうが優れたソリューションでしょうか? 本当に、コマンドを送信してハードウェアからテレメトリを受信できるようにしたいだけで、アプリケーション層プロトコルを作成する必要はありません。

4

5 に答える 5

11

NIOを使用する正当な理由がない限り、NIOは避けてください。 それはあまり楽しくなく、あなたが思うほど有益ではないかもしれません。数万の接続を処理するとスケーラビリティが向上する可能性がありますが、数が少ないほど、IOをブロックすることでスループットが向上する可能性があります。いつものように、後悔するかもしれない何かにコミットする前に、あなた自身の測定をしてください。

他に考慮すべきことは、SSLを使用したい場合、NIOはそれを非常に苦痛にするということです。

于 2008-11-06T23:56:03.397 に答える
10

スケーラビリティは、おそらくパッケージの選択を左右します。java.netは、ソケットごとに1つのスレッドを必要とします。コーディングが大幅に簡単になります。java.nioの方がはるかに効率的ですが、コーディングするのが面倒な場合があります。

処理する予定の接続の数を自問します。比較的少ない場合(たとえば、100未満)は、java.netを使用します。

于 2008-11-06T01:00:20.210 に答える
1

現在、この種のネットワーク コードをゼロから作成する理由はほとんどありません。netty.ioのようなパッケージは、ほとんどの場合、手作りのソリューションよりも少ないコード行数で、より信頼性が高く柔軟なコードを取得できます。また、Netty を使用すると、実装を複雑にすることなく SSL サポートを得ることができます。netty のようなライブラリは、「非同期とスレッド」の問題をほぼ完全に回避し、優れたパフォーマンスを提供し、必要に応じてスレッド モデルを微調整することもできます。

于 2012-04-10T01:54:07.700 に答える
0

あなたが話している接続の数は、java.net を使用する必要があることを示しています。実際、ノンブロッキング I/O でタスクを複雑にする理由はありません。(リモート システムが十分に機能していない場合を除きますが、なぜそれらで Java を使用しているのですか?)

Apache の XML-RPCパッケージを見てください。使いやすく、ネットワーク関係を完全に隠し、古き良き HTTP で動作します。プロトコルの問題について心配する必要はありません...両端ですべてメソッド呼び出しのように見えます。

于 2008-11-06T01:42:08.893 に答える
0

関連する接続の数が少ないことを考えると、java.net は適切なソリューションのように思えます。

他の投稿者は、XML-RPC の使用について話しました。送信されるデータの量が少ない場合、これは良い選択ですが、大量のデータを送信するプロセス間通信 (大量の要求/応答、または頻繁に少量のデータ)。XML 解析のコストは、通常、より最適化されたワイヤ形式 (ASN.1 など) よりも桁違いに高くなります。

少量の制御アプリケーションの場合、XML-RPC の単純さはパフォーマンス コストを上回るはずです。大量のデータ通信の場合は、より効率的なワイヤ プロトコルを使用する方がよい場合があります。

于 2008-11-06T10:28:58.673 に答える