Java NIO は、ノンブロッキング モード (非同期) に設定できるSocketChannelおよびを提供します。ServerSocketChannelほとんどの操作は、成功または操作がまだ完了していないことを示す値を返します。AynchronousSocketChannelコールバック機能とAsynchronousServerSocketChannelは別に、その目的は何ですか?
4292 次
2 に答える
6
AynchronousSocketChannelとAsynchronousServerSocketChannelは、 CompletionHandlerを受け取るメソッドを使用するときに独自の機能を発揮します。
たとえば、サーバーのコードは次のようになります。
asynchronousServerSocketChannel.accept(Void, new ConnectionHander());
クライアント接続を処理するCompletionHandlerConnectionHanderの実装はどこにありますか。
その後、 accept呼び出しを行うスレッドは他の作業を続行でき、NIO API は、クライアント接続が確立されたときにCompletionHandlerへのコールバックのスケジューリングを処理します(これは OS レベルの割り込みだと思います)。
代替コードは次のようになります。
SocketChannel socketChannel = serverSocketChannel.accept();
モードに応じて、呼び出し元のスレッドは、クライアント接続が確立されるか返されるまでブロックされ、pollnullが残ります。どちらの場合も、スレッドを処理しなければならないのはあなたです。これは一般的に、より多くの作業を意味します。
最終的には、特定のユースケースに基づいて選択しますが、私は通常、前者の方がより明確で信頼性の高いコードを生成します。
于 2014-03-04T17:16:54.373 に答える