【发布时间】:2013-03-23 00:26:29
【问题描述】:
假设没有保持活动状态,当 servlet 容器充当独立服务器时,我假设 servlet 的线程在整个响应发送到客户端(例如 Web 浏览器)之前不会被释放。这是一个正确的假设吗?
但是如果 servlet 位于像 Nginx 这样的反向代理之后会发生什么?一旦响应被传递到 Nginx,线程是被释放,还是在响应被发送到它的最终客户端(比如浏览器)之前被保留?
更新:让我试着把它说得更清楚一点。
响应从 servlet 发送到像 nginx 这样的代理只需要几毫秒(比如 2 毫秒)。但最终响应从 nginx 发送到浏览器可能需要额外的 80 毫秒(左右)时间。一旦响应发送到 nginx,servlet 是否释放线程/流,或者 servlet 是否保留它们直到响应发送到浏览器(即整个 80 毫秒)
【问题讨论】:
-
容器不知道它在代理后面,所以这没有区别。通常容器使用线程池,因此线程被无限期地保留。
-
但是 servlet 的输出是否首先进入 nginx 的缓冲区/流?此时 servlet 可以认为响应已完全发送,因此 servlet 关闭流并将线程释放回池中。 nginx 和 servlet 之间的通信只需要几毫秒,而最终响应到达浏览器需要(比如说)80 英里秒。 servlet 是一直持有连接/线程,还是只是发送到 Nginx 的时间。
标签: java multithreading servlets nginx