我希望看到一个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
)。
有什么建议吗?
注笔者:我发现这个答案,https://stackoverflow.com/questions/100841/artificially-create-a-connection-timeout-错误,这表明连接到不可路由的地址,如“10.255.255.1”。但是,我不确定它是最可靠的便携式解决方案。 – Pig
也许值得继承'SecurityManager'并覆盖'checkAccept()'方法,使它睡眠,然后调用System.setSecurityManager(overridenSecurityManager)。想法来自这里:https://stackoverflow.com/questions/7800960/java-socket-listen-before-accept?rq=1 – Pig