1

tyrus websockets ClientManager connectToServer'未收到握手响应'

如何在没有越来越多的守护进程和灰熊内核和灰熊工作线程创建的情况下重试连接。是否有调用 Session 或客户端来杀死/清理 Thread-1 到 4 以及 Grizzly-kernel 和 Grizzly-worker 线程?

示例 JAVA 主线,它永远尝试与可能未运行或定期重新启动的服务器建立并保持连接。


public void onClose(Session session, CloseReason closeReason) {
    latch.countDown();
}


enter code here
public static void main(String[] args) {
    while (true) {
        latch = new CountDownLatch(1);
        ClientManager client = ClientManager.createClient();
        try {
            client.connectToServer(wsListener.class, new URI("wss://<host>/ws"));
            latch.await();
        }
        catch (DeploymentException e) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ie) {
                break;
            }
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }

        client = null;
            latch = null;
            //  HERE... clean up 
    }
}
4

2 回答 2

1

client.connectToServer 返回 Session 实例,当你调用 Session.close() 时,客户端运行时应该被关闭(没有线程离开)。

您没有指定您正在使用的 Tyrus 版本(我推荐 1.3.3,我们在这方面做了一些改进)。此外,您可能对我们的共享容器支持感兴趣,请参阅TYRUS-275。您可以将它与线程池配置结合使用,您应该可以更好地控制生成/运行线程的数量。

我们一直在寻找新的用例,所以如果您认为您有一些应该在 Tyrus 中得到更好支持的东西,请随时在我们的JIRA上创建新的增强请求。

于 2014-01-03T08:17:53.327 回答
0

我得到了完全相同的行为。我使用了很多线程和同步,并设法意外地获得了导致握手超时的 ClientEndpoint 阻塞的 onOpen 方法。

于 2014-03-05T08:18:48.337 回答