Java 插座-故障率是多少?

Java 插座-故障率是多少?,java,sockets,Java,Sockets,我有一个Java套接字客户机与另一种语言编写的套接字服务器对话。我在Linux上运行这个 Java客户机使用测试逻辑进行编码-建立从Java到另一种语言的客户机连接,向服务器发送伪字符串,获取伪字符串-关闭客户机套接字-循环 经过数百万次计算和大约7个小时后,我在java端得到了一个读取超时 现在还没有任何监控工具来查看GC是否有妨碍 这里的普遍期望是什么?它是否应该一直运行,直到服务器空间耗尽或其他外部因素干扰 我如何使这种交流可靠?这里有没有关于容错的最佳实践编码 在此处添加对以下评论

我有一个Java套接字客户机与另一种语言编写的套接字服务器对话。我在Linux上运行这个

Java客户机使用测试逻辑进行编码-建立从Java到另一种语言的客户机连接,向服务器发送伪字符串,获取伪字符串-关闭客户机套接字-循环


经过数百万次计算和大约7个小时后,我在java端得到了一个读取超时

现在还没有任何监控工具来查看GC是否有妨碍

  • 这里的普遍期望是什么?它是否应该一直运行,直到服务器空间耗尽或其他外部因素干扰
  • 我如何使这种交流可靠?这里有没有关于容错的最佳实践编码

在此处添加对以下评论的回复:

谢谢大家的回复。是的,异常正在被捕获和记录——这就是我如何知道套接字读取超时错误的原因。是的,建立了连接,发送也发生了,然后发生了读取超时(根据读取超时错误)。。因此,这是令人费解的-如果服务器出现问题,连接将不会成功,或者在发送/读取数据之前会出现其他问题。此外,服务器上没有错误-服务器有10秒写入超时,但即使没有错误-不确定原因。java有2分钟的读取超时,但仍然抛出了错误


我只输入了错误日志,没有调试/信息级别。服务器应用程序上没有错误,只有java客户端抛出错误,然后它继续抛出读取超时1小时。所以,这又是一个奇怪的现象——java一直在连接和发送测试字符串,并且在接收数据时遇到了问题?服务器从来没有抱怨过?我可以将容错编码为如果读取超时,请等待一段时间,然后重试,但不确定这是否能完全解决我的问题。遗憾的是,服务器无法重写以保持套接字打开

这里的普遍期望是什么?它是否应该一直运行,直到服务器空间耗尽或其他外部因素干扰

没错,而且看起来确实发生了。您需要查看服务器端日志,以了解它没有响应的确切原因

我如何使这种交流可靠?这里有没有关于容错的最佳实践编码


如果服务器支持,最好尽可能长时间地使用单个连接,而不是每个请求使用一个新连接。

“经过数百万次计算和大约7个小时后,我在java端获得了一个读取超时。”-你是说从套接字读取超时?插座开着有多长时间了?请显示一个最小的示例代码。读取超时意味着没有与远程服务器的连接。。。也许你应该为inputstreams提供更好的try/catch和open/close,而不是出现这种问题(我认为99%的问题来自于正确关闭流)。@ArdiGoxhaj读取超时意味着有一个连接,据终端所知,对等方在超时时间内没有响应。try/catch和open/close都与此无关。您是对的,服务器没有响应客户端,我说可能更好的try/catch机制open/close应该解决这个问题,但是排除了如何处理。通常,当您不关闭文件/输入流时,内存就会耗尽。如果您需要提供更好的或容错性,则在发生读取超时时,最好的方法是通过try/catch捕获异常增量一个用0初始化的变量,您可以看到超时发生了多少次,然后您可以尝试建立新连接。@ArdiGoxhaj阅读问题。他正在建立一种新的联系。一次又一次显然,他抓住了一个例外。否则他不会知道的。您引用的15年前的链接大多是胡说八道,从“非阻塞I/O。。。可在任何套接字、服务器套接字或DatagramSocket'上激活。它不能。我只输入了错误日志,而没有调试/信息级别。服务器应用程序上没有错误,只有java客户端抛出错误,然后它继续抛出读取超时1小时。所以,这又是一个奇怪的现象——java一直在连接和发送测试字符串,并且在接收数据时遇到了问题?服务器从来没有抱怨过?我可以将容错编码为如果读取超时,请等待一段时间,然后重试,但不确定这是否能完全解决我的问题。遗憾的是,服务器无法重写以保持套接字打开。