繁体   English   中英

Java,增加套接字超时

[英]Java, increase the socket timeout

我有一个简单的服务器客户端应用程 一切正常,但在某个阶段,从服务器获取响应需要5分钟以上(这是正常的,它需要像这样)。 问题是如果需要超过5分钟,我会不断收到此异常: java.net.SocketTimeoutException: Read timed out

所以我想知道在Windows或我可以设置的Java虚拟机上是否存在默认套接字超时? 我无法更改客户端代码,因此setSoTimeout()不是我的选项。

使用Windows XP ..

编辑:据我所知,现在是在客户端没有打开套接字连接。 它从服务器传递。 所以我反编译了服务器jar文件。 但仍然无法找到有关超时的任何信息。

默认套接字超时为0,表示永不超时。 如果它在5分钟后实际超时,则表示它已在代码中设置。 如果源不可用,并且没有配置,您可以尝试反编译该类,并查找setSoTimeout调用。

由于注释以及搜索未找到任何setSoTimeout()调用的事实,您可以采用不同的方法。 只是让它超时,然后编写一个小脚本,它将重试该调用,以防万一。 如果可以从命令行调用客户端,则可以解析输出,如果它在stderr上运行。

在没有任何流量的情况下长时间保持未使用的TCP连接并不是那么简单。 一些超时后,许多防火墙/路由器关闭未使用的端口。

一种选择可能是实现简单的keepalive协议,偶尔发送虚拟包,但如果你不能触摸客户端代码,这可能不是一个选项。

编辑:我不知道有任何方法来覆盖客户端代码中设置的setSoTimeout()。

回答0是默认超时是不正确的。 例如,由于Axis2客户端具有默认的60秒超时,因此它将取决于您用于进行呼叫的实现类型。

你能提供更多细节吗? 很抱歉写在答案部分,但我没有足够的声誉做评论:)

你需要保持连接活着吗? 为什么不重新考虑它以使其更加异步。 该架构根本没有扩展。 有一次,所有可用线程都可能正在等待服务器的长时间响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM