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