【发布时间】:2017-12-09 08:15:11
【问题描述】:
我想看看 HTTP 客户端如何对连接超时做出反应,即有服务器在端口上侦听,但建立连接的过程太慢以至于客户端放弃并返回连接超时。连接不应该被拒绝,也不应该被接受,然后是套接字超时。
到目前为止,我已经尝试通过覆盖ServerSocket 来引入网络延迟,想象我可以写出这样的东西......
public SlowServerSocket extends ServerSocket {
// (This method doesn't actually exist).
@Override
public void processBytesPassedOnByOperatingSystem(byte[] bytes) {
Thread.sleep(delay);
// Client has already returned a connection timeout.
super.processBytesPassedOnByOperatingSystem(bytes);
}
}
...但是当我达到那个抽象级别时我遇到了死胡同(它似乎隐藏在本机方法中)。我的假服务器接受连接,然后什么也不做,导致套接字超时。
我也在网上寻找解决方案,我从 JMeter 库中找到了SlowSocket,但它似乎用于客户端(而且我认为我无法覆盖客户端,以便它使用SlowSocket)。
有什么建议吗?
【问题讨论】:
-
注意:我找到了这个答案,stackoverflow.com/questions/100841/…,它建议连接到不可路由的地址,例如“10.255.255.1”。但是,我不确定它是否是最可靠/便携的解决方案。
-
可能还值得继承
SecurityManager并覆盖checkAccept()方法以使其休眠,然后调用 System.setSecurityManager(overridenSecurityManager)。想法来自这里:stackoverflow.com/questions/7800960/…