1

我使用嵌入式 Jetty 来托管一个 WEB 服务器。请求被(通过我的内部实现)转发到动态加载的 JAR 中的代码。有时我需要热更新内存中的 JAR,为此我等待请求完成,但由于编程错误或实际长时间运行的操作等待超出合理时间,可能会发生这种情况。

我想在超时后取消对 WEB 请求的处理。
在这种情况下,我可以用 Jetty (v.8+) 做什么?

PS:我知道 Thread.stop() 在带有卡住 WEB 请求的线程上,这似乎不是一个好方法。

4

2 回答 2

1

您可以编写一个 Jetty ,如果它在一段时间后还没有完成,它HandlerWrapper使用 a来中断请求线程。ScheduledExecutorService请参阅此处的示例:

https://github.com/outbrain/ob1k/blob/master/ob1k-jetty/src/main/java/com/outbrain/ob1k/server/jetty/handler/RequestTimeoutHandler.java

于 2016-06-15T11:53:44.667 回答
0

唯一有效的取消请求是通过终止连接和/或端点。

这通常(并且很容易)通过空闲超时完成。

要对 jar 进行热交换,请关闭(或停止)连接器,等待所有请求/连接空闲超时,交换 jar,然后重新启动连接器。

于 2016-06-15T16:35:55.313 回答