我使用Tomcat中8 JSR-356 WebSocket的支持,从而推动我工作的应用程序。到目前为止,它看起来像所有的消息都在一个线程中处理。虽然我明白这背后的原因 - 以及为什么websockets以这种方式实现,是否有任何方法可以使用ExecutorService
来处理进来的消息(而不是在我的代码中创建ExecutorService)?Tomcat的8 JSR 356的WebSocket线程
这将允许具有1个(或仅少数)网络选择器线程(以支持大量连接的客户端)的可扩展性,同时允许对实际消息进行标准的基于线程的处理(当消息需要时为客户处理)。
我看不出有什么特别,将允许这种改变。
好吧,你是说它确实使用线程池来处理传入数据?每个客户端是否有最多一个线程? –
我问,因为当我测试时,它看起来像第二条消息正在等待第一个完成处理。但是,我们都是从同一个会话发出的(也许这就是为什么)。附注:很好的答案 –
分配给每个客户端处理数据的线程不会超过一个。如果一个客户端发送多个消息,那么它们将按顺序处理 - 可能是由相同的线程处理。当线程完成第一条消息时,它会查看是否有更多数据要读取。如果有,它会读取它。如果没有,套接字将返回到选择器/轮询器,直到更多数据到达。数据必须以这种方式处理。在有更多线程的地方,一旦消息(或部分消息)准备好传递给应用程序,就可以在新线程中完成(但不是)。 –