我正在使用Servlet3.0的javax.servlet.AsyncContext接口实现服务器发送的事件。
但是我不明白如何处理对等断开等I / O错误。
对于给定的AsyncContext ac=request.startAsync(),我可以先致电ac.getResponse().getWriter().print(something),然后ac.getResponse.getWriter().flush()它可以正常工作。但是,当客户端断开连接时,不会出现错误-即使我附加了侦听器,onError也不会调用其方法。
AsyncContext ac=request.startAsync()
ac.getResponse().getWriter().print(something)
ac.getResponse.getWriter().flush()
onError
我同时使用Jetty 8和Tomcat 7对其进行了测试,看来与客户端的断开连接没有报告给应用程序。
如何检测通信错误?
问题是:ac.getResponse.getWriter().flush()不抛出IOException
IOException
因此,为了获得有关I / O操作的错误通知,您需要使用ServletOutputStream:
ServletOutputStream
try { ServletOutputStream out = ac.getResponse().getOutputStream(); out.print(stuff); out.flush(); // throws IOException } catch(IOException e) { // handle a error }