我有以下场景:具有相同应用程序的几个 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 秒的延迟,但我想避免这种黑客行为。
有任何想法吗?谢谢!