Java 7 Async SecureSocket?

时间:2013-02-27 14:51:23

标签: java ssl asynchronous io

Java 7附带异步I / O.有没有人知道我是否可以使用它来对SecureSocket进行异步调用?

重新说明:如果我使用sslContext.getSocketFactory().createSocket("127.0.0.1", 42),则使用socket.getOutputStream()socket.getInputStream()以阻止方式进行通信;我需要进行哪些更改才能访问异步函数,这样我才能重新编写代码以异步工作?

3 个答案:

答案 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一样使用它。