Java websockets是否应该让线程忙?

时间:2014-05-22 23:03:42

标签: java tomcat websocket

我正在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 - 但它也是数据库服务器,因此占用了大量内存。

1 个答案:

答案 0 :(得分:2)

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

相关问题