我想看看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
,但它似乎在客户端使用(我不认为我&# 39; ll能够覆盖客户端,以便它使用SlowSocket
)。
有什么建议吗?
答案 0 :(得分:0)
我想看看HTTP客户端如何响应连接超时,即服务器正在监听端口的位置,但设置连接的过程非常慢,客户端放弃并返回连接超时。
您的要求体现了矛盾。当对等主机根本没有响应时,通常由于防火墙而发生连接超时。它与服务器应用程序缓慢无关。服务器没有“建立连接”:TCP堆栈。
不应拒绝连接
除非如下所示,否则不会有听力过程。
并且不应该接受它,然后是套接字超时。
这正是您编写的代码将产生的。
然而和当且仅当服务器平台不是Windows时,还有另一种产生连接超时的方法:让积压队列填满。要生成它,让服务器执行所有正常的套接字设置步骤,但根本不调用accept()
,并让客户端执行大量的连接尝试。但如果服务器平台是Windows,则会产生连接拒绝。
答案 1 :(得分:-1)
我也在线寻找解决方案,我从JMeter库中找到了SlowSocket,但它似乎在客户端使用(我不认为我会成为能够覆盖客户端,以便它使用SlowSocket)。
您可以使用Sniffy来模拟网络延迟 - 它与Java TCP堆栈无缝集成,并且不需要从应用程序端进行任何更改。请参阅documentation on emulating network issues。
demo.sniffy.io提供在线演示 - 点击右下角的小部件,转到"网络连接" 标签并设置延迟 en.wikipedia.org 表示1000毫秒。刷新浏览器页面,您将看到加载页面需要1秒钟。 javaagent integration也可用于非Web应用程序。
免责声明:我是Sniffy
的作者