2011-12-07 44 views
1

某些事實:
- 我的應用程序是客戶端。
- 我有一個Socket池。
- 多個Thread s使用此池。
- 每個Thread都會超時。
- 超時時,即使未從服務器讀取任何答覆,Socket也會返回到池中。
清空InputStream(套接字)

問題:
在超時,有機會,使用這個Socket下一個Thread將不得不讀一些舊的消息(這是由服務器返回的插槽後發送)。

問題:
什麼是最好的方式來「清洗」一Socket使用前InputStream

回答

4

如果您的I/O協議沒有正常完成,最好的解決方案是關閉違規I/O通道,將其從池中刪除,打開一個新連接並將其添加到池中。

爲了達到這個目的,客戶端和服務器都應該爲這種可能性做好準備,提供一種確認另一端活躍度的方法。

+0

即使服務器只是慢幾秒鐘(並且連接實際上很好,處理速度慢)? – AndrewBourgeois

+1

@Andrew。問題是,你永遠不知道你的前一個線程已經停止,所以你不知道如何正確快速前進到已知狀態。選擇適當的超時是網絡編程/維護的黑色藝術,這就是爲什麼網絡顧問(知道他們的東西)付出很高的代價並值得每一分錢的原因。 –

相關問題