3

Java7には非同期I/Oが付属しています。ここの誰かが私がこれを使って非同期呼び出しをすることができるかどうか知っていSecureSocketますか?

言い換えると、私がを使用している場合は、とをsslContext.getSocketFactory().createSocket("127.0.0.1", 42)使用してブロック的な方法で通信します。非同期で動作するようにコードを書き直すことができる非同期関数にアクセスするには、どのような変更を加える必要がありますか?socket.getOutputStream()socket.getInputStream()

4

3 に答える 3

5

ノンブロッキングI/Oを使用するJavaのSSL/TLSは、Java 7では新しいものではありませんが、JavaSE5で導入されました。これ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の一部)は、ストリームではなく、チャネル、バッファー、およびセレクターを使用します。ただし、安全なサーバーには確実に接続できます。ただし、現在のコードには多くの変更が必要になるため、非常に正当な理由がない限り、AsynchIOに更新したくない場合があります。

このチュートリアルを出発点としてお勧めします。

于 2013-02-27T15:02:02.510 に答える