3

Java 7 附带异步 I/O。这里有谁知道我是否可以使用它对 a 进行异步调用SecureSocket

改写:如果我正在使用sslContext.getSocketFactory().createSocket("127.0.0.1", 42),则使用socket.getOutputStream()socket.getInputStream()以阻塞方式进行通信;我需要进行哪些更改才能访问异步函数,这将允许我重写我的代码以异步工作?

4

3 回答 3

5

具有非阻塞 I/O 的 Java 中的 SSL/TLS 在 Java 7 中并不是新事物,而是在 Java SE 5 中引入的。这可以使用SSLEngine而不是套接字来完成。

众所周知,SSLEngine它很难使用。原则上,您可以使用类在通道和InputStream/之间进行转换,但在使用自身方面也有很多工作要做。这里有几个指针:OutputStreamChannelsSSLEngine

于 2013-02-28T20:36:31.220 回答
2

正如布鲁诺正确提到的那样,SSLEngine 是执行异步 SSL 的标准方式。但是那个类很难使用。

前段时间我遇到了同样的问题,最终编写了自己的库。那里有一些示例,当然还有像 Netty 等项目中的代码。但是这两个选项都不是健壮的或易于重用的。

TLS 通道将 SSLEngine 包装在 ByteBuffer 中,并允许像普通的 SocketChannel 一样使用它。

于 2018-09-20T20:13:26.777 回答
1

异步 IO(Java NIO 的一部分)不使用流,而是使用通道、缓冲区和选择器。不过,您绝对仍然可以连接到安全服务器。但是,您当前的代码将需要进行大量更改,因此除非您有充分的理由,否则您可能不想更新到异步 IO。

我推荐本教程作为起点。

于 2013-02-27T15:02:02.510 回答