Servlets 在Jetty关闭连接之前优雅地停止servlet
在一个嵌入式Jetty容器中,我有一个servlet,它通过长轮询将数据推送到客户机,我想在服务器关闭时通知客户机,在他们的连接关闭之前向他们发送消息。当客户端收到此消息时,它应该警告用户并停止进行http请求 不幸的是,调用Server.stop()时Jetty做的第一件事是关闭所有连接器,因此不会发送关闭消息。到目前为止,我找到的唯一解决方案是在服务器上注册LifeCycle.Listener,在连接关闭之前调用它Servlets 在Jetty关闭连接之前优雅地停止servlet,servlets,jetty,long-polling,embedded-jetty,Servlets,Jetty,Long Polling,Embedded Jetty,在一个嵌入式Jetty容器中,我有一个servlet,它通过长轮询将数据推送到客户机,我想在服务器关闭时通知客户机,在他们的连接关闭之前向他们发送消息。当客户端收到此消息时,它应该警告用户并停止进行http请求 不幸的是,调用Server.stop()时Jetty做的第一件事是关闭所有连接器,因此不会发送关闭消息。到目前为止,我找到的唯一解决方案是在服务器上注册LifeCycle.Listener,在连接关闭之前调用它 有没有更好的方法来实现这一点?我本来希望servlet在连接关闭之前通过回调
有没有更好的方法来实现这一点?我本来希望servlet在连接关闭之前通过回调通知即将关闭的服务器。我想你所做的是唯一的方法。查看Jetty 8.1的代码,调用stop()调用 setStopping()是 因此,注册的LifeCycle.Listener是唯一真正被调用的东西
try
{
if (_state == __STOPPING || _state == __STOPPED)
return;
setStopping();
doStop();
setStopped();
}
catch (Exception e)
{
setFailed(e);
throw e;
}
catch (Error e)
{
setFailed(e);
throw e;
}
private void setStopping()
{
LOG.debug("stopping {}",this);
_state = __STOPPING;
for (Listener listener : _listeners)
listener.lifeCycleStopping(this);
}