【问题标题】:Java/Tomcat: how to handle WebSocket setup completionJava/Tomcat:如何处理 WebSocket 设置完成
【发布时间】:2014-08-14 08:17:44
【问题描述】:

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

有什么想法吗?谢谢!

【问题讨论】:

  • 为什么选择 WebSockets?您需要等待连接器启动才能使用它们。一旦应用程序准备好,连接器就会出现。一旦启动钩子运行,应用程序就准备好了。哎呀。
  • 如问题中所述,我尝试在应用程序上下文启动但没有运气时启动 websockets 连接。您能否更深入地描述如何处理该连接器已启动?

标签: java spring tomcat websocket jsr356


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2017-04-10
    • 2014-03-15
    相关资源
    最近更新 更多