3

この製品では、SSLSocketFactoryを使用してサーバーへのSSLSocketを作成しています。サーバーへのソケットを作成するとき、製品構成に応じて2つのアプローチのいずれかを使用します。

(1)標準ソケットを作成し、SSLSocketでラップします。

SSLSocketFactory factory = ...
Socket s = new Socket(host, port);
SSLSocket sslSocket = (SSLSocket)factory.createSocket(s, host, port, true);

(2)SSLソケットを作成するだけです。

SSLSocketFactory factory = ...
Socket socket = factory.createSocket(host, port);

私たちのテスト環境では、両方の方法が同じようにうまく機能します。ただし、さまざまな顧客サイトで、一方の方法が大幅な遅延を引き起こし、もう一方の方法がすぐに接続する場合があることがわかりました(毎回異なる方法)。これは一貫性がなく、再現性がない場合もあります。

これらの接続方法の理論的な違いと、どのような状況でどの接続方法を推奨する必要があるかを誰かに教えてもらえますか?

4

1 に答える 1

1

ソケット プログラミングの大幅な遅延は、ほとんどの場合 DNS の遅延です。Java は DNS を転送するだけでなく、DNS を逆引きもすることに注意する必要があります。すべてのホストで、関連するすべてのピア ホスト名を IP アドレスに、またはその逆に解決できることを確認してください。遅延は、接続先の Socket または InetAddress、またはその両方を作成するときに発生します。これを個別に行うと、 createSocket(socket, ...); を呼び出す前に遅延が発生します。createSocket(host, port, ...) を呼び出して SSLSocketFactory に独自の Socket を作成させると、その時点で遅延が発生します。

于 2012-10-15T09:01:24.027 に答える