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 に答える