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

2019-06-27 04:12发布

我执行使用的Servlet 3.0的服务器发送的事件javax.servlet.AsyncContext接口。

但我不明白,我应该如何处理像同行的断开I / O错误。

对于给定的AsyncContext ac = request.startAsync()我可以调用ac.getResponse().getWriter().print(something) ,然后ac.getResponse.getWriter().flush()它工作正常。 然而,当一个客户端断开连接,我没有得到一个错误-即使我附上一个监听器,它的onError方法没有被调用。

我既码头8和Tomcat 7测试,它似乎从客户端断开不报告给应用程序。

有什么可以做检测通信错误?

Answer 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
}


Answer 2:

这里有一个替代的解决方案,在情况下,它的使用更方便getWriter()

PrintWriter out = ac.getResponse().getWriter();
out.print(stuff);
out.flush(); // swallows IOException
if (out.checkError()) {
   // handle error or throw out...
}

也就是说,为PrintWriter类确实提供再取回写错误的方法。



文章来源: AsyncContext and I/O error handling (when peer disconnects)