2011-12-07 47 views
1

某些事实:
- 我的应用程序是客户端。
- 我有一个Socket池。
- 多个Thread s使用此池。
- 每个Thread都会超时。
- 超时时,即使未从服务器读取任何答复,Socket也会返回到池中。
清空InputStream(套接字)

问题:
在超时,有机会,使用这个Socket下一个Thread将不得不读一些旧的消息(这是由服务器返回的插槽后发送)。

问题:
什么是最好的方式来“清洗”一Socket使用前InputStream

回答

4

如果您的I/O协议没有正常完成,最好的解决方案是关闭违规I/O通道,将其从池中删除,打开一个新连接并将其添加到池中。

为了达到这个目的,客户端和服务器都应该为这种可能性做好准备,提供一种确认另一端活跃度的方法。

+0

即使服务器只是慢几秒钟(并且连接实际上很好,处理速度慢)? – AndrewBourgeois

+1

@Andrew。问题是,你永远不知道你的前一个线程已经停止,所以你不知道如何正确快速前进到已知状态。选择适当的超时是网络编程/维护的黑色艺术,这就是为什么网络顾问(知道他们的东西)付出很高的代价并值得每一分钱的原因。 –

相关问题