4

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

我怎样才能最正确地处理,内部 WebSockets 机制已经启动并且我可以开始使用 WebSockets?

应用程序基于 Spring 4。

我在 spring 启动时尝试了这个Execute 方法,这个How to add a hook to the application context 初始化事件?和spring 启动事件之后的这个Tomcat 。

所有这些方法都很酷,但似乎在那一刻 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 秒的延迟,但我想避免这种黑客行为。

有任何想法吗?谢谢!

4

1 回答 1

3

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

于 2014-07-03T11:10:34.700 回答