Tomcat 上的 Websockets:如何干净地关闭服务器?
Posted
技术标签:
【中文标题】Tomcat 上的 Websockets:如何干净地关闭服务器?【英文标题】:Websockets on Tomcat: how to shutdown the server cleanly? 【发布时间】:2015-08-07 08:35:37 【问题描述】:如何拦截服务器上运行的端点的关闭事件(例如 servlet 的销毁方法)以用于日志记录或其他目的?
【问题讨论】:
你找到答案了吗? 【参考方案1】:Spring 4 Java 配置:
实现 SmartLifecycle(使用基于 Java 的配置时,或将 Java 代码转换为 XML):
@Configuration
public class CycleBean implements SmartLifecycle
public CycleBean()
@Override
public boolean isRunning()
return true;
@Override
public void start()
@Override
public void stop()
//when stopped call
@Override
public int getPhase()
return 0;
@Override
public boolean isAutoStartup()
return true;
@Override
public void stop(Runnable arg0)
//
见http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html第4.6段自定义bean的性质,如:
<bean id="lifecycleProcessor" class="org.springframework.context.support.DefaultLifecycleProcessor">
<!-- timeout value in milliseconds -->
<property name="timeoutPerShutdownPhase" value="10000"/>
</bean>
【讨论】:
感谢您的快速回复。但是我的上下文没有 spring 框架,只有一个在 Tomcat webapp 中运行的 EndPoint。 不好意思,我没听说过EndPoint
所以没把它当成环境
顺便说一句,我拼错了:我应该写 Endpoint
http://docs.oracle.com/javaee/7/api/javax/websocket/Endpoint.html
但是...我会说覆盖onClose(Session session, EndpointConfig config)
方法。首先(如果可能)调用super.onClose(session, closeReason)
,然后调用日志记录方法
谢谢丹尼尔森。但是,onClose(Session session, CloseReason reason)
方法是为每个关闭的会话触发的,而不是在端点实例关闭时触发。而且我找不到方法onClose(Session session, EndpointConfig config)
来覆盖...它应该属于哪个类?以上是关于Tomcat 上的 Websockets:如何干净地关闭服务器?的主要内容,如果未能解决你的问题,请参考以下文章
在 Tomcat 7 中运行 Java EE 7 WebSockets
我如何确定不会错过 WebSockets 上的“打开”事件? [复制]
使用 Safari 错误在 websockets 和 Tomcat 上强制使用 SSL
本地主机上的 Apache Tomcat websockets 实现