Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的套接字不活动超时_Java_Sockets_Timeout - Fatal编程技术网

java中的套接字不活动超时

java中的套接字不活动超时,java,sockets,timeout,Java,Sockets,Timeout,我在socket java API中找不到一种方法来关闭一个超时毫秒打开的非活动连接。 目标是避免当我忘记显式关闭套接字(并强制远程资源重新启动)时出现尴尬错误 如果我没有找到一个低级方法,我会给我们的连接添加一个上次使用的值,并定期检查它。。。但我觉得这很难看 谢谢 安托万 另外,我不希望连接超时,我也不确定是否理解设置超时,但我很确定这不是我们想要的 当然,避免忘记关闭更好,但是在一个大项目+大团队中……我们试图找到一种100%安全的方法。也许,您可以创建一个套接字包装器,或者创建一个观察者

我在socket java API中找不到一种方法来关闭一个超时毫秒打开的非活动连接。 目标是避免当我忘记显式关闭套接字(并强制远程资源重新启动)时出现尴尬错误

如果我没有找到一个低级方法,我会给我们的连接添加一个上次使用的值,并定期检查它。。。但我觉得这很难看

谢谢

安托万

另外,我不希望连接超时,我也不确定是否理解设置超时,但我很确定这不是我们想要的


当然,避免忘记关闭更好,但是在一个大项目+大团队中……我们试图找到一种100%安全的方法。

也许,您可以创建一个套接字包装器,或者创建一个观察者,以便在初始化套接字实例时使用

使用Aspcts(AOP),您可以截取所有套接字创建调用作为切入点,并启动一个新的TimeoutObserver作为一个方面

此TimeoutObserver包含用于检查套接字是否打开或关闭的规则的实现

该解决方案的一个优点是,当您对公司软件中已经实现的和新实现感到安全时,AOP模型不具有侵入性

也许,这是处理这个问题的一种方式


[]的,请尝试打开以便保持:

s.setKeepAlive(true);
如果设置了keep alive,客户端应该偶尔(通常一到两个小时)将测试数据包发送回服务器。如果它在几分钟内没有收到响应,它将假定服务器已关闭连接而未发出通知,并将自行关闭

这应该可以在服务器崩溃的情况下工作。我不确定如果你的服务器还在运行,它是否会工作——只是忽略了客户端


最好是跟踪您创建的所有套接字,并让线程定期检查每个套接字,看看它是否仍然处于打开状态,以及最近是否使用过。我不认为这很难看,我认为这可能是最好的处理方法。

是的。很难找到任何在团队工作中公开的健壮解决方案-因为我独立编写代码,所以我的第一个设计到达run(){do{catch timeout exception;)而(stayRunning);}时,stayRunning作为一个公共静态跟踪所有套接字,等等获得sync()问题,但正如您所说,这并不难看。您是对的,如果另一端只是停止侦听,您就无法避免等待read()超时。因此,这与连接超时或soTimeout无关。您必须使用单独的线程,只调用锁上的wait(timeout)(并在每次读取之前禁用或重置超时,使其在正常操作下不会关闭)。或将整个网络模型更改为非阻塞。