【发布时间】:2013-01-24 12:05:02
【问题描述】:
我正在使用 Socket 类建立一个 java TCP 连接。
Socket socket = new Socket();
socket.connect(new InetSocketAddress(host,port),50);
我希望快速建立或根本不建立此连接,因此我使用 50 毫秒作为连接超时时间。
但如果我测量这些调用之间的时间,我会得到超过 50 毫秒:125 毫秒,甚至 200 毫秒。测量我使用 System.currentMillis() 的时间。我知道这种方法的粒度不是很好,但是+100ms的差异实在是太荒谬了。
connect方法有问题?超时时间太短了 50 毫秒?我在 Windows 7 中使用 java 1.7.0_03。
【问题讨论】:
-
如果没有详细的实施知识,我不确定这是否可以回答。底层操作系统也有可能对超时值使用某个最小值或粒度。还要考虑从主机名解析 IP 地址所需的时间;这不是连接超时 AFAIK 的一部分。
-
您衡量的是连接成功还是失败?
-
也有可能只有第一次连接尝试需要很长时间。尝试在 100 个连接的循环中对其进行测量。
-
50ms 对于网络超时来说太短了。使用几秒钟之类的实际值。
-
我正在测量成功和失败的连接,在一个有超过 100 个连接的循环中,所花费的时间只是不一致(62,55,67,251,104...)。我使用的主机格式为“xxx.xxx.xxx.xxx”,所以我认为不涉及任何 ip 解析。奇怪的是,当我使用私有网络“192.168.1.x”中的主机时,不会出现不一致的超时。
标签: java sockets connection timeout