Ale*_*zin 4 java servlets jetty
问题
基于 Jetty 9 的服务器正在处理耗时(30-60 秒)和计算量大(并行处理中涉及约 20 个线程)的请求。
由于交互性,客户端可能会在几秒钟后取消 HTTP 请求并发送新的请求。
如果客户端关闭了连接,最好立即取消计算。
不成功的尝试
在关闭 HTTP 连接的情况下,尝试写入响应输出流将触发IOException. 但是,在此应用程序的情况下,HTTP 状态取决于整个计算的结果,因此在处理过程中不可能将任何内容写回套接字。因此,此选项不适用。
Jetty 有方便的HttpConnection.getCurrentConnection()方法,可用于获取与 HTTP 连接相关的一些内部类的引用,包括底层SocketChannel. 虽然我还没有找到一种方法来检查连接的活跃度SocketChannel或其他与连接相关的 Jetty 类。
最好的选择是使用javax.servlet.AsyncContext和它的javax.servlet.AsyncListener。
首先调用java.servlet.HttpServletRequest.startAsync()以获取AsyncContext.
然后添加AsyncListener您自己的自定义,不要忘记也在您的上设置超时AsyncContext(因为它的存在覆盖了默认的空闲超时机制)
你会得到对你有用的事件......
这是 Servlet API 为您的情况提供的机制:在可能提前终止的活动请求期间进行计算或后端繁重处理。
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |