我已尝试写入响应,因为没有适当的断开回调:
private boolean write(byte[] output, AsyncContext context) {
try {
OutputStream stream = context.getResponse().getOutputStream();
stream.write(output);
stream.flush();
return true;
} catch (IOException ex) {
//client disconnected
log.error(ex);
removeAsyncContext(context);
return false;
}
}
但这似乎不是诀窍。当客户端断开连接时,写入和刷新缓冲区没有抛出异常。
奇怪的是,第二次尝试写入输出流时(断开连接后),写入确实会引发异常。看起来你第一次写/刷新它时,一些内部状态被设置为错误,没有通知。
我在 Jetty 8 和 Tomcat 7 上都试过了,我看到了同样的行为。
有没有办法查明客户端是否收到了消息?我错过了什么吗?