Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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 什么是常见的SocketException,是什么导致了它们?_Java_Error Handling - Fatal编程技术网

Java 什么是常见的SocketException,是什么导致了它们?

Java 什么是常见的SocketException,是什么导致了它们?,java,error-handling,Java,Error Handling,我被抓到了属于亚种的SocketException,例如断管或连接重置。问题是一旦这些狡猾的混蛋被抓住,该怎么办 哪些我可以愉快地忽略,哪些需要进一步关注?我正在寻找不同SocketException及其原因的列表。就Java web开发而言,管道断开或连接重置基本上意味着另一方关闭了连接。这可能是由于客户端在请求仍在运行时按Esc键,或在请求仍在运行时通过链接/书签/地址栏导航离开。在长时间运行的请求中,例如大文件下载和不必要的大/慢业务任务(这对不耐烦的用户来说不太好,大约3秒是最长的时间)

我被抓到了属于亚种的SocketException,例如断管连接重置。问题是一旦这些狡猾的混蛋被抓住,该怎么办


哪些我可以愉快地忽略,哪些需要进一步关注?我正在寻找不同SocketException及其原因的列表。

就Java web开发而言,管道断开或连接重置基本上意味着另一方关闭了连接。这可能是由于客户端在请求仍在运行时按Esc键,或在请求仍在运行时通过链接/书签/地址栏导航离开。在长时间运行的请求中,例如大文件下载和不必要的大/慢业务任务(这对不耐烦的用户来说不太好,大约3秒是最长的时间),您经常会看到这种特殊错误。在极少数情况下,它也可能由硬件/网络问题引起,例如服务器或客户端的网络中断


调用响应输出流上的
flush()
close()
时,可能会引发此异常。作为服务器端,您不能对它做任何事情。由于HTTP中的安全限制,无法(重新)连接客户端,因此无法从中恢复。在大多数情况下,您甚至不应该尝试这样做,因为这通常是客户自己的决定。就Java web开发而言,管道破裂或连接重置基本上意味着另一方关闭了连接。这可能是由于客户端在请求仍在运行时按Esc键,或在请求仍在运行时通过链接/书签/地址栏导航离开。在长时间运行的请求中,例如大文件下载和不必要的大/慢业务任务(这对不耐烦的用户来说不太好,大约3秒是最长的时间),您经常会看到这种特殊错误。在极少数情况下,它也可能由硬件/网络问题引起,例如服务器或客户端的网络中断


调用响应输出流上的
flush()
close()
时,可能会引发此异常。作为服务器端,您不能对它做任何事情。由于HTTP中的安全限制,无法(重新)连接客户端,因此无法从中恢复。在大多数情况下,您甚至不应该尝试这样做,因为这通常是客户自己的决定。忽略它或记录它以获取纯粹的统计信息。

另一个原因通常是操作系统上的TCP/IP堆栈设置。我还没有在Linux上尝试过,但我使用过的一个平台是Sun的Solaris 9/10操作系统。基本思想是Solaris有一个可调的TCP/IP堆栈,您可以在运行web应用程序时对其进行调优

因此,有两个参数需要注意

  • tcp_conn_req_max_q0-不完全握手队列
  • tcp_conn_req_max_q1-完全握手队列
  • tcp_keepalive_间隔-keepalive
  • tcp_time_wait_interval—被视为活动的tcp段的时间 在互联网上
以上所有参数都会影响系统可以承受的负载量(从TCP/IP的角度来看),另一方面也会影响某些类型的SocketException的发生,例如上面BalusC指出的那些类型


这显然很复杂,但我想指出的一点是,您经常使用的操作系统为您提供了缓解策略。

另一个原因通常是操作系统上的TCP/IP堆栈设置。我还没有在Linux上尝试过,但我使用过的一个平台是Sun的Solaris 9/10操作系统。基本思想是Solaris有一个可调的TCP/IP堆栈,您可以在运行web应用程序时对其进行调优

因此,有两个参数需要注意

  • tcp_conn_req_max_q0-不完全握手队列
  • tcp_conn_req_max_q1-完全握手队列
  • tcp_keepalive_间隔-keepalive
  • tcp_time_wait_interval—被视为活动的tcp段的时间 在互联网上
以上所有参数都会影响系统可以承受的负载量(从TCP/IP的角度来看),另一方面也会影响某些类型的SocketException的发生,例如上面BalusC指出的那些类型

这显然很复杂,但我想说的是,你经常使用的操作系统为你提供了缓解策略