2013-02-27 32 views
0

隨異步I/O提供的Java 7。有人在這裏知道,如果我可以使用它來異步調用SecureSocketJava 7 Async SecureSocket?

改編:如果我使用sslContext.getSocketFactory().createSocket("127.0.0.1", 42),則使用socket.getOutputStream()socket.getInputStream()以阻塞方式進行通信;我需要做些什麼改變來訪問異步函數,這將允許我重寫我的代碼以異步工作?

回答

4

具有非阻塞I/O的Java中的SSL/TLS在Java 7中並不是新的,而是在Java SE 5中引入的。可以使用SSLEngine而不是套接字來完成此操作。

SSLEngine是臭名昭着難以使用。原則上,您可以使用Channels類在頻道和InputStream/OutputStream之間進行轉換,但在使用SSLEngine本身方面也有相當多的工作要做。這裏有幾個指針:

+0

我看到異步I/O比非阻塞I/O要好。查看對[此評論]的回覆(http://stackoverflow.com/questions/592303/asynchronous-io-in-java#comment12606745_592592)。它並沒有好得多,但它應該會更好,並且它只能在Java 7中引入。 – 2013-03-01 01:42:39

+0

事實上,即使使用NIO2,也必須使用通道和SSLEngine。我不知道,額外的複雜性是否值得提高性能。有一個[J.F.Arcand(灰熊項目)](parleys.com/d/318)的談話,但它似乎沒有談論SSL。 – Bruno 2013-03-01 10:15:38

1

異步IO(Java NIO的一部分)不使用流,而是使用流,而是使用通道,緩衝區和選擇器。儘管如此,你仍然可以連接到安全的服務器。儘管你當前的代碼會有很多需要的改變,所以你可能不想更新到Asynch IO,除非你有很好的理由。

我推薦this tutorial作爲起點。