高级 I/O 和 Tomcat
目录
简介
重要说明:使用这些功能需要使用 HTTP 连接器。AJP 连接器不支持它们。
异步写入
当使用 HTTP 连接器时,Tomcat 支持使用 sendfile 发送大型静态文件。这些写入,一旦系统负载增加,将以最有效的方式异步执行。与其使用阻塞写入发送大型响应,不如将内容写入静态文件,并使用 sendfile 代码写入。缓存阀可以利用这一点,将响应数据缓存到文件中,而不是存储在内存中。如果请求属性 org.apache.tomcat.sendfile.support
设置为 Boolean.TRUE
,则可以使用 sendfile 支持。
任何 servlet 都可以通过设置适当的请求属性来指示 Tomcat 执行 sendfile 调用。还需要正确设置响应的 content length。使用 sendfile 时,最好确保请求或响应都没有被包装,因为响应主体将在稍后由连接器本身发送,因此无法过滤。除了设置 3 个必要的请求属性外,servlet 不应该发送任何响应数据,但它可以使用任何导致修改响应头的方法(如设置 cookie)。
org.apache.tomcat.sendfile.filename
: 将作为字符串发送的文件的规范文件名org.apache.tomcat.sendfile.start
: 开始偏移量,以 Long 表示org.apache.tomcat.sendfile.end
: 结束偏移量,以 Long 表示
除了设置这些参数外,还需要设置 content-length 头。Tomcat 不会为你这样做,因为你可能已经将数据写入输出流。
请注意,使用 sendfile 将禁用 Tomcat 可能对响应执行的任何压缩。