一尘不染

AsyncContext和I / O错误处理(当对等方断开连接时)

tomcat

我正在使用Servlet3.0的javax.servlet.AsyncContext接口实现服务器发送的事件。

但是我不明白如何处理对等断开等I / O错误。

对于给定的AsyncContext ac=request.startAsync(),我可以先致电ac.getResponse().getWriter().print(something),然后ac.getResponse.getWriter().flush()它可以正常工作。但是,当客户端断开连接时,不会出现错误-即使我附加了侦听器,onError也不会调用其方法。

我同时使用Jetty 8和Tomcat 7对其进行了测试,看来与客户端的断开连接没有报告给应用程序。

如何检测通信错误?


阅读 291

收藏
2020-06-16

共1个答案

一尘不染

问题是:ac.getResponse.getWriter().flush()不抛出IOException

因此,为了获得有关I / O操作的错误通知,您需要使用ServletOutputStream

try {
   ServletOutputStream out = ac.getResponse().getOutputStream();
   out.print(stuff);
   out.flush(); // throws IOException
}
catch(IOException e) {
   // handle a error
}
2020-06-16