Java 7 附带异步 I/O。这里有谁知道我是否可以使用它对 a 进行异步调用SecureSocket
?
改写:如果我正在使用sslContext.getSocketFactory().createSocket("127.0.0.1", 42)
,则使用socket.getOutputStream()
和socket.getInputStream()
以阻塞方式进行通信;我需要进行哪些更改才能访问异步函数,这将允许我重写我的代码以异步工作?
Java 7 附带异步 I/O。这里有谁知道我是否可以使用它对 a 进行异步调用SecureSocket
?
改写:如果我正在使用sslContext.getSocketFactory().createSocket("127.0.0.1", 42)
,则使用socket.getOutputStream()
和socket.getInputStream()
以阻塞方式进行通信;我需要进行哪些更改才能访问异步函数,这将允许我重写我的代码以异步工作?
具有非阻塞 I/O 的 Java 中的 SSL/TLS 在 Java 7 中并不是新事物,而是在 Java SE 5 中引入的。这可以使用SSLEngine
而不是套接字来完成。
众所周知,SSLEngine
它很难使用。原则上,您可以使用类在通道和InputStream
/之间进行转换,但在使用自身方面也有很多工作要做。这里有几个指针:OutputStream
Channels
SSLEngine
正如布鲁诺正确提到的那样,SSLEngine 是执行异步 SSL 的标准方式。但是那个类很难使用。
前段时间我遇到了同样的问题,最终编写了自己的库。那里有一些示例,当然还有像 Netty 等项目中的代码。但是这两个选项都不是健壮的或易于重用的。
TLS 通道将 SSLEngine 包装在 ByteBuffer 中,并允许像普通的 SocketChannel 一样使用它。
异步 IO(Java NIO 的一部分)不使用流,而是使用通道、缓冲区和选择器。不过,您绝对仍然可以连接到安全服务器。但是,您当前的代码将需要进行大量更改,因此除非您有充分的理由,否则您可能不想更新到异步 IO。
我推荐本教程作为起点。