在我们的产品中,我们使用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);
在我们的测试环境中,两种方法同样有效。然而,在不同的客户站点,我们发现在某些情况下,其中一种方法会导致严重延迟,而另一种方法会立即连接(每次使用不同的方法)。这不一致,有时不可重复。
任何人都能说出这些连接方法之间的理论差异,以及在哪种情况下应该推荐哪种方法?
答案 0 :(得分:1)
套接字编程的显着延迟几乎总是DNS延迟。您需要知道Java确实反向DNS以及转发DNS。确保您可以在所有主机上将所有相关的对等主机名解析为IP地址,反之亦然。创建Socket或它要连接的InetAddress或两者都会导致延迟。如果你单独这样做,你会在调用createSocket(socket,...)之前看到那里的延迟;如果你让SSLSocketFactory通过调用createSocket(host,port,...)来创建自己的Socket,那么延迟将在那时发生。