繁体   English   中英

Java websockets是否应该让线程忙?

[英]Are Java websockets supposed to keep threads busy?

我正在Tomcat中为一个内部网应用程序实现websockets,该应用程序定期有100-200个用户。

正在完成替换一个长轮询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

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

要正确使用websockets,您还应该使用非阻塞HTTP连接器,否则您最终将为每个HTTP连接提供一个专用线程(并且这种连接不能很好地扩展)。 查看Tomcat文档,了解如何配置它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM