gpt4 book ai didi

java - Java websockets 应该让线程保持忙碌吗?

转载 作者:行者123 更新时间:2023-11-28 22:42:38 24 4
gpt4 key购买 nike

我正在 Tomcat 中为定期拥有 100 - 200 名用户的 Intranet 应用程序实现 websockets。

正在替换一个长轮询 servlet,该 servlet 推送我将要发送到 websocket 的同一组 JSON 数据。

在进行一些测试时,我注意到每个 websocket 连接都占用一个线程,当我有 50 个应用程序实例在运行时,至少有 50 个繁忙线程。

对于长轮询 servlet,我平均使用 5 个线程来运行所有 50 个实例,因为 3.0 servlet 规范为长轮询 servlet 释放了线程。

我知道我可以根据需要增加 maxThread 参数,但我担心如果我有更多应用程序具有相同的用户群(这很可能)我将需要 1000 tomcat 的线程将一直很忙。

具体来说,我的问题是:

1) 这正常吗?有没有办法释放 websocket 线程?

2) 如果我有 1000 个线程专门用于保持 websockets 打开,这真的是个问题吗?

3) 在 websockets 进一步发展之前,我是否应该坚持使用长轮询?

Tomcat 7.0.50

Java 1.7.0_21

网络服务器是具有 32 GB 内存的 Windows Server 2008 R2 - 但它也是数据库服务器,因此会占用大量内存。

最佳答案

要正确使用 websockets,您还应该使用非阻塞 HTTP 连接器,否则您最终会为每个 HTTP 连接使用一个专用线程(并且扩展性不太好)。查看有关如何配置它的 Tomcat 文档。

关于java - Java websockets 应该让线程保持忙碌吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818465/

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