【问题标题】:Start or Stop a jetty ServerConnector without server restart在不重新启动服务器的情况下启动或停止 jetty ServerConnector
【发布时间】:2019-01-31 22:07:49
【问题描述】:

我使用码头服务器来处理客户端请求,并且有一个要求,我需要按需启动或停止一个或几个 ServerConnector,而无需重新启动这些连接器所连接到的服务器。

例如。

ServerConnector httpConnector;
ServerConnector httpsConnector;
Server server;
server.addConnector(httpConnector);
server.addConnector(httpsConnector);
server.start()

需要启动/停止/取消特定连接器而不强制服务器重新启动。

【问题讨论】:

  • 为什么?如果要更新安全证书 (TLS/SSL),请知道不需要为此重新启动 ServerConnector。
  • @JoakimErdfelt 为什么不呢? ;-) 如果您暂时禁用对特定端口上服务器的访问(但仍使其在其他端口上运行),停止连接器听起来是一种合理的方式。
  • 连接器仅用于接受连接,现有连接不受影响。
  • @JoakimErdfelt 问题是关于停止和启动连接器,而不是中止当前活动的连接。
  • 关于 serverconnector.close()。 “一旦连接器关闭,如果不先调用 LifeCycle.stop(),它就无法再次打开,并且在随后调用 LifeCycle.start() 之前它不会再次处于活动状态”

标签: java server jetty embedded-jetty


【解决方案1】:

您必须执行以下操作...

// TODO: Have a reference to the Connector you are going to work with

// Remove from server first.
server.removeConnector(connector);

// Stop the connector.
// NOTE: Existing connections will still live on.  
// This will only stop accepting new connections.
connector.stop(); // might take a while (waiting for acceptors to close)

// TODO: do what you want with this connector

// Eg: harshly close existing connections
connector.getConnectedEndPoints().forEach((endpoint)-> {
    endpoint.close();
});

// Re-add stopped connector if you want
// This will start connector as well
// This can fail (eg: if port is already in use)
server.addConnector(connector);

【讨论】:

  • 然后如果需要启动连接器,我必须显式启动它(connector.start())。谢谢!
  • 我可以确认:连接器需要通过 connector.start() 重新启动才能正常工作。否则添加后不接受连接。
【解决方案2】:

您可以调用连接器上的stop 来停止它,并调用start 来重新启动它。要获取相关连接器,有两种解决方案:

  • 将创建的连接器实例保存在某处并调用方法
  • 通过调用 getConnectors 获取服务器的所有连接器,遍历它们,找到要停止的连接器并在其上调用 stop 或 start 以停止或启动它。

【讨论】:

  • 也必须从服务器中删除它。
  • @JoakimErdfelt 为什么?我刚在这里试过。停止连接器后,我在尝试访问该端口并再次启动连接器后再次(从 servlet)获得答案时在浏览器中遇到错误。
  • 连接器仍然存在,引用并持有各种资源(基于操作系统和基于 Java、接受线程分配、保留线程计算、连接器统计处理、错误处理、重定向处理等)。在某些版本的 Windows(例如)上,您无法以这种方式重新启动它。它必须首先从 Bean 和 LifeCycle 层次结构中移除。
猜你喜欢
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 2011-07-21
  • 2013-01-29
相关资源
最近更新 更多