適切な切断コールバックがないため、応答への書き込みを試みました。
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;
}
}
しかし、これはうまくいかなかったようです。クライアントが切断されている場合、バッファの書き込みとフラッシュは例外をスローしませんでした。
奇妙なことに、2 回目に出力ストリームに書き込もうとすると (切断後)、書き込みによって例外がスローされます。初めて書き込み/フラッシュしたように見えますが、通知せずに一部の内部状態がエラーに設定されています。
Jetty 8 と Tomcat 7 の両方で試しましたが、同じ動作が見られます。
クライアントがメッセージを受信したかどうかを確認する解決策はありますか? 何か不足していますか?