关于使用Java而不是netty等框架使用SSL实现NIO (SocketChannel and SSLEngine)的信息,有一些有用的信息。

我正在尝试提出一个SSL实现,该实现可以与blocking/non阻塞 channel 一起使用,并获得一些基本的qns

当操作appData和Net缓冲区时,没有太多有关线程安全性问题的信息。根据SSLEngine的文档,

“需要注意两个并发问题:
wrap()unwrap()方法可以彼此同时执行。
SSL/TLS协议(protocol)使用有序数据包。应用程序必须注意确保按顺序交付生成的数据包。如果数据包乱序到达,则可能会发生意外或致命的结果。”

这是否适用于阻塞和非阻塞?有人可以解释。谢谢。

另外,设置初始缓冲区大小的一般建议似乎基于(session.getApplicationBufferSize()/getPacketBufferSize()),如何设置这些值?这些更好地代替32k的某些标准缓冲区大小使用吗?

最佳答案

  • 您通常不会在多个线程中执行SSLEngine操作,因此不会出现此问题。您唯一使用另一个线程的时间是在执行SSLEngine任务时,并且不使用SSLEngine


  • 是的,当然可以。


  • 将您的网络缓冲区大小设置为getPacketBufferSize(),并将您的应用程序缓冲区大小设置为getApplicationBufferSize()


  • 如果愿意,可以使用不同的缓冲区大小,但是为什么呢?您冒着以下风险:要么浪费了太大的缓冲区空间,要么提供了太小而无法使用的缓冲区。
  • 09-06 09:31