如果重要的话,我正在使用jetty,版本7.0.1。
有时我在服务器上有一些很长时间运行的任务,如果客户端断开连接我想取消/停止(如果是GET请求,不是例如POST文件上传)。似乎情况并非如此,而且任务仍在继续 完成。
也许我可以使用ServletRequestListener.requestDestoryed监听器来获取此类任务的通知但是建议的是什么 停止请求线程的方法?如何释放数据库连接,文件句柄或运行任务等资源 (执行人服务)?
建议尽快停止此类任务的方法是什么?
答案 0 :(得分:0)
首先我建议更新到最新版本的码头,我们已经修复了自7.0系列以来的吨位
第二,解决这个问题的最好办法是设计使用jetty-continuations来获得servlet 2.5规范的异步servlet支持(这是jetty7)或更新到servlet 3.0(jetty 8)而不依赖于get方法servlet api阻止等待响应发送。而是处理请求然后生成线程或使用执行程序future来处理操作,然后在有有效负载或成功消息返回时回调请求。原因是当您在servlet api中阻塞请求进程时,您正在消耗servlet线程池中的资源和线程...您将能够通过使用continuation或3.0的异步servlet来扩展更清晰...
此外,您将能够设计一个适当的机制来管理这些线程和诸如超时之类的事情以及针对异常条件的正确通知机制,并且它将在servlet容器之外进行测试。
imo至少:)