Java 7附带异步I / O.有没有人知道我是否可以使用它来对SecureSocket
进行异步调用?
重新说明:如果我使用sslContext.getSocketFactory().createSocket("127.0.0.1", 42)
,则使用socket.getOutputStream()
和socket.getInputStream()
以阻止方式进行通信;我需要进行哪些更改才能访问异步函数,这样我才能重新编写代码以异步工作?
答案 0 :(得分:4)
Java中的SSL / TLS非阻塞I / O在Java 7中并不新,但是在Java SE 5中引入。这可以使用SSLEngine
而不是套接字来完成。
SSLEngine
众所周知难以使用。您原则上可以使用Channels
类在频道和InputStream
/ OutputStream
之间进行转换,但在使用SSLEngine
方面还有很多工作要做本身。以下是一些指示:
答案 1 :(得分:1)
异步IO(Java NIO的一部分)不使用流,而是使用通道,缓冲区和选择器。你绝对可以连接到安全的服务器。但是,当前代码需要进行大量更改,因此您可能不希望更新为Asynch IO,除非您有充分的理由。
我建议this tutorial作为起点。
答案 2 :(得分:0)
正如Bruno正确提到的那样,SSLEngine是执行异步SSL的标准方法。但是该类严重很难使用。
前段时间,我遇到了同样的问题,最终编写了自己的库。有一些示例,当然还有Netty等项目中的代码。但是,这两种选择都不是可靠的或易于重用的。
TLS Channel将SSLEngine封装在ByteBuffer中,并允许像普通的SocketChannels一样使用它。