Java / Tomcat:如何处理WebSocket设置完成

时间:2014-06-24 07:04:09

标签: java spring tomcat websocket jsr356

我有以下场景:具有相同应用程序的少数Tomcat实例需要在启动时相互连接。对于服务器之间的连接,使用WebSockets(JSR-356)。 当Tomcat启动时,我需要使用另一台服务器启动建立。

如何正确处理内部WebSockets机制,我可以开始使用WebSockets?

应用程序基于Spring 4。

我尝试了这个Execute method on startup in spring,这个How to add a hook to the application context initialization event?Tomcat after Startup Event with spring

所有这些方法都很酷但似乎在那个时刻WebSockets还没有准备好使用。 抛出下一个异常:

javax.websocket.DeploymentException: The HTTP request to initiate the WebSocket connection failed    
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:373)
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:201)
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:222)
...
Caused by: java.util.concurrent.TimeoutException
at sun.nio.ch.PendingFuture.get(PendingFuture.java:197)
at org.apache.tomcat.websocket.WsWebSocketContainer.processResponse(WsWebSocketContainer.java:599)
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:343)

目前,作为一种解决方法,我在建立连接之前在WebServlet的init()方法中使用3秒延迟,但这是我想要避免的黑客攻击。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

我只是通过将连接建立设置为单独的线程来解决它。 没有单独的线程,它会阻止Tomcat启动的继续。 希望有一天会对某人有所帮助。