我已經構建了一個使用Tomcat的流式中繼服務器。通過Tomcat流式傳輸
簡單的想法是:一個客戶端執行POST,另一個客戶端執行GET。該Servlet產生一個線程並進行簡單的字節混洗,直到InputSteam(來自POST)爲空。完成後關閉/回答這兩個請求。一切都很好,它完美的工作,但:
Tomcat似乎重用請求對象,甚至是InputStream對象!每隔10個POST,InputStream就不能被讀取,因爲已經關閉。仔細看看日誌,我意識到使用完全相同的InputStream對象被先前的請求使用(並因此關閉)。原來即使是HttpServletRequest對象也完全一樣。
這是怎麼回事?爲什麼Tomcat重複使用明顯沒有被正確重置的對象?我已經用7.0.29和6.0.16版本試過了,同樣的事情。
這種事情通常發生在請求完成後保留對資源的引用時。您是否在任何地方存儲對請求,響應或流的引用? – 2012-08-09 00:44:11
我沒有緩存任何請求或響應對象,但事實證明,字節混排線程釋放InputStream對象有點太遲了(在請求已經返回之後),所以我認爲這是問題所在。雖然我同意永遠不要緩存這些對象,但Tomcat迴應如此糟糕的事實令人大失所望! – Daniel 2012-08-09 19:12:29