12

NIO2 で利用可能なインターネット上のすべてのソース/サンプルは、TLS/SSL をサポートしていません。

java.nio.channels.AsynchronousSocketChannel java.nio.channels.AsynchronousServerSocketChannel

接続の SSLEngine ライフサイクルが AsynchronousSocketChannel.connect && AsynchronousServerSocketChanne.accept と異なることを理解しているので、TLS/SSL は AIO 実装内にカプセル化する必要があるため、両方を使用するにはどうすればよいですか? 注:Grizzlyプロジェクトで、すでに実装されていることについて話しているビデオを見て、ソースコードを見ましたが、AIOは見ましたが、TLS/SSL統合は見ませんでした...

前もって感謝します!

4

2 に答える 2

5

元の質問に対するコメントは確かに正しいです。 SSLEngineは、 ByteBufferを直接 使用して動作します。

これは、AIO と互換性があることを意味します。接続を受け入れることから始めます。次にクライアントが接続し、最初の書き込みを実行します。十分なデータがバッファリングされているかどうかを判断するには、ハンドシェイクの statusstatusを使用します。相手側からさらにデータを提供する必要がある場合、エンジンは「NEED_UNWRAP」と伝え続けます。したがって、ByteBuffer オブジェクトのキューを保持する必要があります。同様に、続行する前に相手側にさらにデータを送信する必要がある場合、エンジンは「NEED_WRAP」と伝え続けます。握手ステータスが「Finished」になるまで続けます。

ただし、これをより簡単にするNettyのようなものを使用することをお勧めします。Netty は 4 のアルファ段階で AIO をサポートしていたことに注意してください。ただし、AIO は NIO より遅いことが示されました。したがって、それは削除されました。

ただし、Netty を使用すると、NIO または AIO を直接使用するよりも物事が単純になるだけでなく、AIO が再導入された場合に 2 つを簡単に切り替えることができます。

Netty で SSL を使用する完全な例は、ここにあります。

于 2013-09-22T19:50:59.453 に答える