我在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 - 但它也是数据库服务器,这样会占用大量的内存。
你使用这些websockets的库是什么?有些需要配置为使用线程池。 – Thilo
是的,1000线程可能会成为一个问题。 – Thilo
@Thilo使用内置的[tomcat websocket库](http://tomcat.apache.org/tomcat-7.0-doc/web-socket-howto.html) – Geronimo