tyrus websocket connectToServer - 如何清理守护进程线程

时间:2013-10-09 14:01:20

标签: java websocket tyrus

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

如何在没有创建越来越多的守护进程和Grizzly内核以及Grizzly-worker线程的情况下重试连接。 是否有调用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 
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

我们一直在寻找新的用例,因此如果您认为Tyrus应该更好地支持某些内容,请随时在JIRA上创建新的增强请求。

答案 1 :(得分:0)

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