Netty4.0xx版本中 如何实现TCP粘包处理

xie_hongtao 2014-02-14 11:23:42
由于项目要高性能需求,使用Netty4.0.15版本,属于4.0版本系列,4.0与之前3.0版本有较大变动,
请问,协议使用Netty4.0.15的TCP协议(传送Byte流),如何处理粘包问题,
(1)听说Netty有自己的处理粘包方案,LengthFieldBasedFrameDecoder
(2)如果没有,需要手工写代码实现,这样会很麻烦,
全部写代码,需要根据包头包尾标识,及包长度来判断包的完整性。
需要拆包时,要找包头标识,及包尾标识,需要把ByteBuff数据流,转成Byte数组,在Byte数组中找出标识,这不很费劲?影响性能啊
...全文
1121 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcbuzhiming 2014-03-15
  • 打赏
  • 举报
回复
1.Netty4的io.netty.handler.codec下面的类大部分都是处理协议的类,也就是你说的用来处理粘包问题的类,你的byte流可以用io.netty.handler.codec.bytes解决,也可以考虑io.netty.handler.codec.string,它甚至能直接传送对象,也能编码http协议。原理其实也很简单,无非就是在你给它的内容部分前面加长度部分,到达目标区时根据这个部分解码,来解决粘包 2.手工实现代码也没多麻烦的地方,粘包问题说白了就是因为你不知道一个有效包的长度,而tcp的流传输又是无休无止的。所以方法只有两个,要么你像netty那样加长度,要么你自己定义一个结束符加在每个包的末尾。至于性能问题,你想多了,这压根就不影响性能,现在的nio处理能力比你想的强太多了,你还是先考虑自己的带宽和数据库承载能力造成的瓶颈比较合适

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧