问题
码头9基于服务器正在处理耗时(30-60秒)和计算重(〜涉及并行处理20个线程)请求。
由于互动性,客户端可能会取消几秒钟后,HTTP请求和发送一个新的。
人们希望立即取消计算,如果连接已经被客户关闭。
不成功的尝试
在封闭的HTTP连接的情况下,尝试写入响应输出流会触发IOException
。虽然,在此应用程序的情况下,HTTP状态取决于整个计算的结果,所以这是不可能写任何东西回窝在处理过程中。因此,这个选项是不适用的。
码头有方便的HttpConnection.getCurrentConnection()
可以用来去相关,包括基本的HTTP连接一些内部类的引用方法SocketChannel
。虽然我还没有找到一种方法来检查连接虽然活力的SocketChannel
或与之相关的连接其他码头的班。
最好的选择是使用javax.servlet.AsyncContext
和它的javax.servlet.AsyncListener
。
与呼叫开始java.servlet.HttpServletRequest.startAsync()
得到AsyncContext
。
然后添加自定义AsyncListener
你自己的,不要忘了还设置了超时您AsyncContext
(作为其存在覆盖默认的空闲超时机制)
你会得到事件意味着什么对你有用...
这是在Servlet API提供了整整您的情况的机制:在可能被提早终止活动请求计算或后端重处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句