我有一个Java应用程序,它通过Java-COM桥使用第三方COM组件。 此COM组件打开与远程主机的套接字连接。
这个主机可能需要一些时间来回应,我怀疑我正在暂停。我不确定,因为正如我所说,它是一个封闭源的第三方组件。
此组件的API不会向我公开套接字连接,因此我无法配置超时。所以我想知道是否有任何方法可以调整系统默认超时。
我正在使用Windows Server 2008 x64企业版。
答案 0 :(得分:2)
您是否要构建应用程序,以便它在运行时知道是否发生了超时,或者您是否要检查闭源COM组件的行为?如果是后者,请在开发箱上安装Wireshark并观察连接。如果是前者,您是否希望确保您的Java呼叫本地不会永远挂起?如果是这种情况,请查看java.util.concurrent执行器服务内容 - 有一种方法可以在另一个线程中调用一个方法,并在将控制权交还给您的线程之前等待最多N秒。
答案 1 :(得分:1)
如果你想看到连接建立,然后可能从超时中删除,你可以使用TCPview:http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx
答案 2 :(得分:0)
您可以引入自己的SocketImplFactory(请参阅java.net.Socket类的静态方法setSocketImpl())。然后,您可以使用自己的SO_TIMEOUT参数值创建SocketImpl对象。
答案 3 :(得分:0)
Microsoft针对TcpMaxDataRetransmissions的“Windows Vista Tcp Ip配置设置”中描述的注册表设置可能允许您设置所需的全局超时。
当然,您需要注意的是,在此过程中,如果对实际错误的响应延迟,您不会削弱服务器的其余部分。