我正在使用 Spring Boot 2.5 编写 HTTP API 服务器。我对 Spring Boot 如何处理多个 HTTP 请求有点困惑?
假设 Spring Boot 应用程序一次处理 N 个请求。它是否为 Spring Boot 应用程序创建 N 个线程?
\n\nSpring Boot是否创建N个线程来处理N个请求?
\n
是的。
\n然而,(1) 这并不是 Spring Boot 的一个特有功能,(2) 在基于 Web 容器的应用程序中,您真的不应该担心自己管理线程(尽管对内部结构感兴趣是件好事)。
\nSpring Boot 将其 HTTP 通信基于Servlet API,即 Spring Boot使用Servlet 容器(即在后台作为应用程序服务器运行的容器)来处理 HTTP 通信,并且通常,服务 HTTP Spring Boot 使用 Tomcat,如默认的 Servlet 容器。
\n另一方面,Servlet API 进行了定义HttpServletRequest和HttpServletResponse类型化,以便于分别处理 HTTP 请求和 HTTP 响应消息。
现在,问题变成:Servlet Container 如何处理 HTTP 请求?
\n另外,请注意service()方法文档的内容:
\n\nServlet 通常在可以同时处理多个请求的多线程 Servlet 容器内运行。开发人员必须注意同步对任何共享资源(例如文件、网络连接以及 servlet 的类和实例变量)的访问。
\n
当容器看到传入的 HTTP 请求消息被映射到 Servlet 实例时,它会实例化两个对象:HttpServletResponse和HttpServletRequest(每个请求都会发生这种情况);
然后,容器为该请求创建(或从线程池中分配)一个新线程,并service(..)通过将这些 HttpServletRequest 和 HttpServletResponse 对象传递到该方法中来调用该新线程中的 Servlet 方法。
如果不是这样设计的,服务器将阻止每个 HTTP 消息的执行,直到后者完成。
\n请注意:
\n在两种常见情况下,与请求关联的线程可能处于空闲状态:
\n| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |