
TCP是流式協議,不保證一次通信傳輸完整的包,當這種情況發生在mina-http時會產生嚴重的bug,圖中紅框部分只是將前后收到的數據拼在一起,但下面處理的還是最近收到的不完整的msg;此為大坑!
輕則不能正常處理http請求,重則由于mina-http內部使用狀態機解析http請求,會導致內部狀態異常,而調用decode的上層又是while(buff.hasRemain()) { decoder.decode(); }某些極端情況下會對這個buf重復decode,會導致收到大量的http請求,產生大量HttPRequest對象,FullGC,OOM,JVMCrash……
看了mina-http這段代碼,不知道作者是否真正測試過,對mina很失望……
后記:該問題在mina-2.0.8中得到了修復,建議使用mina-http的童鞋升級到2.0.8。
新聞熱點
疑難解答