我一直在玩Tomcat 7.0.4的新Servlet 3.0异步功能。我找到了这个Chat Application,它允许客户端挂起GET请求以获取消息更新。在接收消息时这很好用。
当客户端断开连接,即用户关闭浏览器时,会出现问题。即使客户端已断开连接,服务器似乎也不会引发IOException
。消息线程(参见上面链接的源代码)很乐意写入所有存储的AsyncContext
输出流。
这是一个Tomcat错误吗?或者我在这里遗失了什么?如果这不是一个错误,那么我应该如何检测客户端是否已关闭连接?
答案 0 :(得分:1)
第44-47行的代码正在处理它,
} catch(IOException ex) {
System.out.println(ex);
queue.remove(ac);
}
这里也是75-83,使用超时功能,
req.addAsyncListener(new AsyncListener() {
public void onComplete(AsyncEvent event) throws IOException {
queue.remove(ac);
}
public void onTimeout(AsyncEvent event) throws IOException {
queue.remove(ac);
}
});
编辑:在获得更多洞察力之后。