【发布时间】:2016-05-25 00:12:18
【问题描述】:
我有一个 Java TLS 客户端,它可以向服务器发送一系列请求,每个请求后跟对服务器的响应。
但是,有许多不同的服务器。有些是“多消息”服务器,在第一个请求后保持连接打开,以便可以通过第一个连接发送后续请求。其他是“单消息”服务器,在每条消息后关闭连接,因此后续消息需要新连接。客户端没有先验方法知道它正在与哪种类型的服务器通信,也无法修复服务器。
非常希望单消息服务能够在没有完全握手的情况下恢复会话。
我的原始客户端代码只是尝试通过同一连接发送后续请求。如果失败了,它只是打开了一个到服务器的新连接。因此,它可以同时处理单消息和多消息服务器。
但是,将第二条消息发送到单消息服务器时失败似乎会终止会话恢复。
我的肮脏工作是注意消息是否失败,然后假设它正在与单消息服务器通信,在这种情况下,客户端会在收到每个响应后显式关闭套接字。这使后续连接能够恢复会话。
但必须有更好的方法。不出所料,测试 isInputShutdown 或 isConnected 没有帮助,因为存在时间问题。单消息服务器的连接失败实际上发生在读取响应期间,写入请求之后,可能是由于缓冲。
有什么非常感谢的想法吗?
【问题讨论】: