2016-10-05 12 views
1

SSLEngineのドキュメントから:「SSL/TLS抽象化をI/O転送メカニズムから分離することにより、SSLEngineは非ブロッキングI/OタイプなどのさまざまなI/Oタイプに使用できます。 O(ポーリング)、選択可能なノンブロッキングI/O、ソケットと従来の入出力ストリーム、ローカルByteBuffersまたはバイト配列、.. "SSLEngineを通常のソケットで使用し、チャネルをブロックします。 。SSLEngine with blocking IO

+0

いいえネットワークにバインドされています。私は数年前にこれを広範にテストしました。 NIOのパフォーマンスが良いという考えは、一般的に神話です。それが持つもの、または少なくとも設計されたものは、スケーラビリティが優れています。同じことではありません。 – EJP

答えて

0

マージンは、はい。 NIOはノンブロッキングIOだけではありません。

  • バイト配列ではなく、ラップバッファ(ByteBuffers)に基づくより高いレバーAPIです。
  • API「スキャッタリング」と「収集」APIは、同じIO操作で複数のシーケンシャルバッファを使用する機能です。
  • ダイレクトIO:ヒープからライブで使用できる「直接」ByteBuffersを使用します。

最後の点は、ヒープベースの配列/バッファを使用するときに、ネイティブ呼び出しで送信された配列の余分なコピーをガベージコレクタとの同期を容易にするためです。これは、ネイティブバッファでは回避され、ガベージコレクションのオーバーヘッドを大幅に削減できます。

SSLEngineは正しく使用しているので、使用可能性の問題が大きいと言います。特に古いSSLSocketを使用するよりもはるかに難しいです。

幸いなことに、this libraryでは、SSLEngineを使用してSSLEngineを使用することができます(免責事項:私は主著者です)。