zoukankan      html  css  js  c++  java
  • 关于Client_Abort_Exception异常的分析和解决

    1、什么情况下会出现“ClientAbortException:  java.net.socketException:  Broken pipe”?

       答:客户端非正常(标准握手协议)退出连接,体现在http请求,可能是用户等待页面响应过程中,关闭浏览器,或停止了请求。

     

    2、为什么有的应用报这个问题,有的应用确没有打错误日志?

       答: 分析发现,其实其他应用也会有这个错误,但是tomcat的专门coyoteWriter的写方法,已经替你忽略掉写的时候发生的异常。因此,异常其实是产生的,只不过被吞了。 

              但为什么有的还打印出日志呢?发现有些场景,有些工具会拿取response.getOutputStream()来构造的writer,没有忽略异常,而是选择了抛出,因此你看到了这个问题;

              所以,你使用tomcat为servlet容器他帮忙你忽略了这个问题; 

     

    3、会抛ClientAbortException,但我发现有的时候提交正常?(即问题本质是啥?

       答: 分析很久,排除眼花,后来发现,对一个对端已经关闭的socket调用两次write(和tcp 关闭握手有关), 第二次将会生成SIGPIPE信号, 该信号默认结束进程,会抛出Broken pipe的exception.

     

    其他的解决方案: 如果也不愿意产生异常,我们可以借助nginx,http请求有个proxy_ingnore_client_abort:on的配置;

  • 相关阅读:
    jQuery表单选择器 安静点
    设计模式建造者模式
    设计模式组合模式
    设计模式单例模式
    简述ASP.NET网站开发步骤
    设计模式适配器模式
    设计模式工厂方法模式
    设计模式桥接模式
    设计模式装饰模式
    设计模式抽象工厂方法模式
  • 原文地址:https://www.cnblogs.com/luyi/p/4379002.html
Copyright © 2011-2022 走看看