[英]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.