我正在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 - 但它也是数据库服务器,因此占用了大量内存。
答案 0 :(得分:2)
为了正确使用websockets,你还应该使用非阻塞HTTP连接器,否则你最终会为每个HTTP连接提供一个专用线程(并且这种连接不能很好地扩展)。查看Tomcat文档,了解如何配置它。