【问题标题】:Gracefully stopping servlets before Jetty closes connections在 Jetty 关闭连接之前优雅地停止 servlet
【发布时间】:2012-04-05 23:20:57
【问题描述】:

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

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

有没有更好的方法来实现这一点?我希望 servlet 在连接关闭之前通过即将关闭的服务器的回调得到通知。

【问题讨论】:

    标签: servlets jetty long-polling embedded-jetty


    【解决方案1】:

    我猜你做的是唯一的方法。查看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 是唯一真正被调用的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 2011-04-30
      • 2015-06-25
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多