从SSLEngine文档:"通过将SSL / TLS抽象与I / O传输机制分离,SSLEngine可用于各种I / O类型,例如非阻塞I / O (轮询),可选的非阻塞I / O,Socket和传统的Input / OutputStreams,本地ByteBuffers或字节数组,..."与使用SSLSocket阻止IO相比,将SSLEngine与常规套接字和阻塞通道一起使用会更好。
答案 0 :(得分:0)
边缘,是的。 NIO不仅仅是关于非阻塞IO。它还带来了:
最后一点具有非常具体的一般性能影响,因为当使用基于堆的数组/缓冲区时,JVM会对本机调用中发送的任何数组执行额外的副本,以促进与垃圾收集器的同步。使用本机缓冲区可以避免这种情况,这可以显着减少垃圾收集开销。
也就是说,SSLEngine存在巨大的可用性问题,因为正确地使用它会严重认真,特别是比使用旧的SSLSocket要困难得多。
幸运的是,this library允许使用带有ByteChannel接口的SSLEngine,围绕SSLEngine进行所有繁重的工作(免责声明:我是主要作者)。