【问题标题】:tyrus websocket connectToServer - how to clean up daemon threadstyrus websocket connectToServer - 如何清理守护线程
【发布时间】:2013-10-09 14:01:20
【问题描述】:

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 
    }
}

【问题讨论】:

    标签: java websocket tyrus


    【解决方案1】:

    client.connectToServer 返回 Session 实例,当您调用 Session.close() 时,应关闭客户端运行时(没有剩余线程)。

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

    我们一直在寻找新的用例,因此,如果您认为自己的某些功能应该在 Tyrus 中得到更好的支持,请随时在我们的 JIRA 上创建新的增强请求。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-24
        • 2016-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多