3

在我们的产品中,我们使用 SSLSocketFactory 创建一个到服务器的 SSLSocket。在为服务器创建套接字时,我们根据产品配置使用两种方法之一:

(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 回答