我希望看到一個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