TCP是流式協議,不保證一次通訊傳輸完整的包,當這種狀況發生在mina-http時會產生嚴重的bug,圖中紅框部分只是將先後收到的數據拼在一塊兒,但下面處理的仍是最近收到的不完整的msg;此爲大坑!測試
輕則不能正常處理http請求,重則因爲mina-http內部使用狀態機解析http請求,會致使內部狀態異常,而調用decode的上層又是while (buff.hasRemain()) { decoder.decode(); }某些極端狀況下會對這個buf重複decode,會致使收到大量的http請求,產生大量HttpRequest對象,Full GC,OOM, JVM Crash……code
看了mina-http這段代碼,不知道做者是否真正測試過,對mina很失望……對象
後記:該問題在mina-2.0.8中獲得了修復,建議使用mina-http的童鞋升級到2.0.8。blog