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