我的应用程序通过Tomcat 8.5(servlet 3.1)的JSR 356实现使用Web套接字。根据JSR,它应该使用NIO但我不确定理解。
当客户端请求Web Socket连接时,会在客户端和服务器之间创建永久对话。在这种情况下,我想知道客户端或服务器的每个请求是否由Tomcat池的不同线程处理,或者相同的线程是否始终专用于此连接。
此外,该线程如何处理请求?它是否等待JDBC调用(例如阻塞IO)或在这种情况下是否发布(NIO)?与众所周知的仅使用NIO的Netty相比,在websocket案例中Tomcat线程模型是如何不同/类似的?
答案 0 :(得分:2)
当存在要处理的数据时,从池中分配线程以处理WebSocket连接上的传入数据。一旦完成,线程就会返回池中。事实上可能(实际上)每次都会使用不同的线程。
传出消息将使用阻塞或非阻塞IO,具体取决于API的哪个部分使用。
JDBC调用通常会阻塞,但由JDBC驱动程序控制。应用程序如何处理JDBC调用以及与WebSocket消息的关系(如果有)取决于应用程序。