websocket - Tomcat 8.5 线程模型

标签 websocket netty threadpool tomcat8 servlet-3.1

我的应用程序通过 Tomcat 8.5(servlet 3.1)的 JSR 356 实现使用 Web 套接字。根据JSR,它应该使用NIO,但我不确定是否理解。

当客户端请求 Web Socket 连接时,客户端和服务器之间会创建永久 session 。在这种情况下,我想知道客户端或服务器的每个请求是否由 Tomcat 池的不同线程处理,或者是否始终专用于该连接。

此外,这个线程如何处理请求?例如,它是否等待 JDBC 调用(阻塞 IO),或者在本例中释放它(NIO)?与众所周知仅使用 NIO 的 Netty 相比,Tomcat 线程模型在 websocket 情况下有何不同/相似?

最佳答案

当有数据需要处理时,将从池中分配一个线程来处理 WebSocket 连接上的传入数据。一旦完成,线程就会返回到池中。有可能(事实上很可能)每次都会使用不同的线程。

传出消息将使用阻塞或非阻塞 IO,具体取决于使用 API 的哪一部分。

JDBC 调用通常会阻塞,但这由 JDBC 驱动程序控制。应用程序如何处理 JDBC 调用以及与 WebSocket 消息的关系(如果有)取决于应用程序。

关于websocket - Tomcat 8.5 线程模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48846321/

相关文章:

javascript - 在不复制的情况下通过 WebSocket 发送 ArrayBuffer 的子段

java - 何时在netty中使用Unpooled

java - Java中的线程池有什么用?

c - SIGIO 只通知线程池中的最后一个线程

c# - 线程池抛出异常

java - 如何从 Java 控制台程序连接到 WebSocket?

websocket - 在 Go 中提供 websocket

php - 在 Swift 中为聊天应用程序保持套接字打开

netty - 跨多个服务器和客户端 Bootstrap 重用 NioWorkerPool

Netty 4.0 - 实例化 DefaultChannelGroup