2014-05-22 26 views
0

我在Tomcat中实现了一个定期有100到200个用户的Intranet应用程序的websockets。Java websockets是否应该保持线程繁忙?

正在完成这项工作来取代一个长的轮询servlet,这个servlet推动了我要发送给websocket的JSON数据。

在做一些测试时,我注意到每个websocket连接都连接一个线程,当我有50个应用程序运行时,最少有50个忙线程。

随着长轮询servlet的平均5个线程,所有50个实例运行,因为3.0 servlet规范释放长轮询servlet的线程。

我知道我可以根据需要增加maxThread参数,但是我担心如果我有更多的应用程序具有相同的用户群(可能有些东西),我将需要1000个线程用于tomcat,它将会在任何时候都很忙。

具体而言,我的问题是:

1)这是正常的吗?有没有解除websocket线程的方法?

2)如果我有1000线程致力于保持websocket的打开,这实际上是一个问题吗?

3)我应该坚持长时间轮询,直到websockets发展更多?

的Tomcat 7.0.50

的Java 1.7.0_21

Web服务器为Windows Server 2008 R2与32 GB的RAM - 但它也是数据库服务器,这样会占用大量的内存。

+0

你使用这些websockets的库是什么?有些需要配置为使用线程池。 – Thilo

+1

是的,1000线程可能会成为一个问题。 – Thilo

+0

@Thilo使用内置的[tomcat websocket库](http://tomcat.apache.org/tomcat-7.0-doc/web-socket-howto.html) – Geronimo

回答

1

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