首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java和AsynchronousSocketChannel/AsynchronousServerSocketChannel / NIO2

Java和AsynchronousSocketChannel/AsynchronousServerSocketChannel / NIO2
EN

Stack Overflow用户
提问于 2012-10-12 15:28:51
回答 2查看 2.7K关注 0票数 12

互联网上所有在NIO2上可用的资源/样本都没有TLS/SSL支持,

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

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

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2013-09-23 03:50:59

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

这意味着它与AIO兼容。您首先接受一个连接。然后,客户端连接并执行初始写入。要确定是否有足够的数据缓冲,请使用handshake statusstatus。因此,您需要保留一个ByteBuffer对象队列。你一直走,直到你从握手状态“完成”。

不过,我建议你使用像Netty这样的东西,它会让这一切变得简单得多。应该注意的是,Netty在alpha阶段4中确实支持AIO。但是,它显示AIO比NIO慢。因此,它被删除了。

然而,Netty不仅会让事情变得比尝试直接使用NIO或AIO更简单,而且如果重新引入AIO,还会使两者之间的切换变得容易。

有关在Netty中使用SSL的完整示例可以在here中找到。

票数 5
EN

Stack Overflow用户

发布于 2018-09-06 05:12:50

在Java中执行TLS的标准方法是使用SSLEngine。但是这个类很难使用。有一些教程,但是对于一个典型的应用程序来说,使用SSLEngine应该是不可能的。ByteChannel和他们的朋友不是直接支持的,这意味着需要做很多工作。

前段时间我遇到了同样的问题,并最终编写了自己的库。有一些例子,当然也有像Netty等项目内部的代码,但这两个选项都不健壮,也不容易重用。

TLS Channel将SSLEngine封装在ByteBuffer中,并允许像使用普通SocketChannels一样使用它。AsynchronousByteChannels是隐藏选择器循环的更高级别抽象;该库也支持这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12854255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档