gpt4 book ai didi

Java NIO2 AsynchronousSocketChannel/AsynchronousServerSocketChannel 和 TLS/SSL

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:24:36 32 4
gpt4 key购买 nike

INTERNET 上所有在 NIO2 上可用的源/示例都没有 TLS/SSL 支持,

java.nio.channels.AsynchronousSocketChanneljava.nio.channels.AsynchronousServerSocketChannel

据我了解,连接的 SSLEngine 生命周期不同于 AsynchronousSocketChannel.connect && AsynchronousServerSocketChanne.accept,TLS/SSL 应该封装在 AIO 实现中,那么我如何同时使用它们......?注意:我在 Grizzly 项目中的一个视频中谈到他们已经实现了它,我查看了源代码,但我看到了 AIO 而不是 TLS/SSL 集成...

提前致谢!

最佳答案

对原问题的评论确实是正确的。 SSLEngine使用 ByteBuffer 操作直接地。

这意味着它与 AIO 兼容。您首先接受一个连接。然后客户端连接并执行初始写入。要确定您是否有足够的缓冲数据,请使用 handshake statusstatus .如果需要从另一端提供更多数据,引擎将不断告诉您“NEED_UNWRAP”。所以你需要保留一个 ByteBuffer 对象队列。同样,引擎会不断告诉您“NEED_WRAP”是否需要在继续之前将更多数据发送到另一端。你继续前进,直到你从握手状态得到“完成”。

不过,我建议您使用 Netty 之类的东西,它可以让这一切变得更简单。需要注意的是,Netty 在 4 的 alpha 阶段确实支持 AIO。但是,显示 AIO 比 NIO 慢。因此,它被删除了。

但是,Netty 不仅会使事情比尝试直接使用 NIO 或 AIO 更简单,而且如果重新引入 AIO,还可以轻松地在两者之间切换。

可在 Netty 中找到使用 SSL 的完整示例 here .

关于Java NIO2 AsynchronousSocketChannel/AsynchronousServerSocketChannel 和 TLS/SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12854255/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com