【问题标题】:Empty the InputStream (of a Socket)清空 InputStream(一个 Socket 的)
【发布时间】:2012-01-15 04:20:47
【问题描述】:

一些事实:
- 我的应用程序是客户端。
- 我有一个Socket 池。
- 多个Threads 使用此池。
- 每个Thread 都可以超时。
- 超时时,Socket 会返回到池中,即使没有从服务器读取回复。

问题:
超时时,下一个使用此SocketThread 可能必须读取一些旧消息(该消息是在 Socket 返回后由服务器发送的)。

问题:
在使用前“清除”SocketInputStream 的最佳方法是什么?

【问题讨论】:

    标签: java sockets io


    【解决方案1】:

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

    为此,客户端和服务器都应通过提供确认另一端活跃性的方法来为这种可能性做好准备。

    【讨论】:

    • 即使服务器只慢了几秒钟(实际上连接很好,但处理速度很慢)?
    • @Andrew。问题是,您永远不知道上一个线程在哪里中断,因此您不知道如何正确快进到已知状态。选择适当的超时是网络编程/维护的一门黑魔法,这也是网络顾问(他们知道自己的东西)获得巨额报酬并物有所值的原因。
    猜你喜欢
    • 2011-10-11
    • 2017-07-15
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2011-08-23
    • 2014-09-10
    • 2017-01-17
    • 1970-01-01
    相关资源
    最近更新 更多