進階 IO 與 Tomcat
目錄
簡介
重要注意事項:使用這些功能需要使用 HTTP 連接器。AJP 連接器不支援這些功能。
非同步寫入
使用 HTTP 連接器時,Tomcat 支援使用 sendfile 來傳送大型靜態檔案。這些寫入作業會在系統負載增加時以最有效率的方式非同步執行。與其使用封鎖寫入傳送大型回應,也可以將內容寫入靜態檔案,並使用 sendfile 程式碼寫入。快取閥門可以利用此功能將回應資料快取在檔案中,而不是儲存在記憶體中。如果要求屬性 org.apache.tomcat.sendfile.support
設為 Boolean.TRUE
,則可以使用 sendfile 支援。
任何 servlet 都可以透過設定適當的請求屬性,指示 Tomcat 執行 sendfile 呼叫。也需要正確設定回應的內容長度。使用 sendfile 時,最好確保請求或回應都沒有被封裝,因為回應主體稍後會由連接器本身傳送,所以無法過濾。除了設定 3 個必要的請求屬性之外,servlet 不應該傳送任何回應資料,但可以使用任何會修改回應標頭的方法(例如設定 cookie)。
org.apache.tomcat.sendfile.filename
:將作為字串傳送的檔案正規名稱org.apache.tomcat.sendfile.start
:開始偏移量,為 Longorg.apache.tomcat.sendfile.end
:結束偏移量,為 Long
除了設定這些參數之外,還需要設定內容長度標頭。Tomcat 沒有幫你這麼做,因為你可能已經將資料寫入輸出串流。
請注意,使用 sendfile 會停用 Tomcat 可能在回應上執行的任何壓縮。