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

问题描述:

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

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

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

我想你做的是唯一的方法。纵观码头8.1的代码,调用停止()调用

 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是其他任何东西之前真的叫的嘛。