Servlets 在Jetty关闭连接之前优雅地停止servlet

Servlets 在Jetty关闭连接之前优雅地停止servlet,servlets,jetty,long-polling,embedded-jetty,Servlets,Jetty,Long Polling,Embedded Jetty,在一个嵌入式Jetty容器中,我有一个servlet,它通过长轮询将数据推送到客户机,我想在服务器关闭时通知客户机,在他们的连接关闭之前向他们发送消息。当客户端收到此消息时,它应该警告用户并停止进行http请求 不幸的是,调用Server.stop()时Jetty做的第一件事是关闭所有连接器,因此不会发送关闭消息。到目前为止,我找到的唯一解决方案是在服务器上注册LifeCycle.Listener,在连接关闭之前调用它 有没有更好的方法来实现这一点?我本来希望servlet在连接关闭之前通过回调

在一个嵌入式Jetty容器中,我有一个servlet,它通过长轮询将数据推送到客户机,我想在服务器关闭时通知客户机,在他们的连接关闭之前向他们发送消息。当客户端收到此消息时,它应该警告用户并停止进行http请求

不幸的是,调用Server.stop()时Jetty做的第一件事是关闭所有连接器,因此不会发送关闭消息。到目前为止,我找到的唯一解决方案是在服务器上注册LifeCycle.Listener,在连接关闭之前调用它


有没有更好的方法来实现这一点?我本来希望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);
}