SSL + NIO 的线程安全
Thread Safety with SSL + NIO
关于使用 java 实现 SSL
和 NIO (SocketChannel and SSLEngine)
的一些有用信息,而不是使用 netty 等框架。
我正在尝试提出一个 SSL
实现,它可以与 blocking/non
阻塞通道一起使用并获得一些基本的 qns
。
关于处理 appData 和 Net 缓冲区时线程安全问题的信息不多。根据 SSLEngine
、
的文档
"有两个并发问题需要注意:
wrap()
和 unwrap()
方法可以同时执行。
SSL/TLS
协议使用有序数据包。应用程序必须注意确保生成的数据包按顺序传送。如果数据包乱序到达,可能会出现意外或致命的结果。"
这是否适用于阻塞和非阻塞?有人可以解释一下。谢谢。
此外,设置初始缓冲区大小的一般建议似乎基于 (session.getApplicationBufferSize()/getPacketBufferSize()
),如何设置这些值?这些是否比 32k
左右的标准缓冲区大小更好?
- 您通常不会在多个线程中执行
SSLEngine
操作,因此应该不会出现该问题。唯一一次使用另一个线程是在执行 SSLEngine
任务时,并且不使用 SSLEngine
.
Would this be applicable to both blocking and non blocking?
- 当然可以。
the general recommendation for setting up the initial buffer sizes seems to based of (session.getApplicationBufferSize()/getPacketBufferSize())
, how would these values be set?
- 将您的网络缓冲区大小设置为
getPacketBufferSize()
,并将您的应用程序缓冲区大小设置为 getApplicationBufferSize()
。
Are these better to be used instead of some standard buffer size of 32k or so?
- 您可以根据需要使用不同的缓冲区大小,但为什么呢?您 运行 存在浪费 space 缓冲区太大或提供的缓冲区太小而无法使用的风险。
关于使用 java 实现 SSL
和 NIO (SocketChannel and SSLEngine)
的一些有用信息,而不是使用 netty 等框架。
我正在尝试提出一个 SSL
实现,它可以与 blocking/non
阻塞通道一起使用并获得一些基本的 qns
。
关于处理 appData 和 Net 缓冲区时线程安全问题的信息不多。根据 SSLEngine
、
"有两个并发问题需要注意:
wrap()
和 unwrap()
方法可以同时执行。
SSL/TLS
协议使用有序数据包。应用程序必须注意确保生成的数据包按顺序传送。如果数据包乱序到达,可能会出现意外或致命的结果。"
这是否适用于阻塞和非阻塞?有人可以解释一下。谢谢。
此外,设置初始缓冲区大小的一般建议似乎基于 (session.getApplicationBufferSize()/getPacketBufferSize()
),如何设置这些值?这些是否比 32k
左右的标准缓冲区大小更好?
- 您通常不会在多个线程中执行
SSLEngine
操作,因此应该不会出现该问题。唯一一次使用另一个线程是在执行SSLEngine
任务时,并且不使用SSLEngine
.
Would this be applicable to both blocking and non blocking?
- 当然可以。
the general recommendation for setting up the initial buffer sizes seems to based of (
session.getApplicationBufferSize()/getPacketBufferSize())
, how would these values be set?
- 将您的网络缓冲区大小设置为
getPacketBufferSize()
,并将您的应用程序缓冲区大小设置为getApplicationBufferSize()
。
Are these better to be used instead of some standard buffer size of 32k or so?
- 您可以根据需要使用不同的缓冲区大小,但为什么呢?您 运行 存在浪费 space 缓冲区太大或提供的缓冲区太小而无法使用的风险。