gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:21:21 26 4
gpt4 key购买 nike

tyrus websockets ClientManager connectToServer“未收到握手响应”

如何在不创建越来越多的守护进程、Grizzly-kernel 和 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
}
}

最佳答案

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

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

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

关于java - tyrus websocket connectToServer - 如何清理守护线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19274265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com