【socket】netty中粘包问题的解决策略

参考《netty权威指南》

解决思路

  • 消息定长,例如每个报文的大小为固定长度200字节,不够用空格补充

  • 在包尾增加回车换行符进行分割,如ftp协议

  • 将消息分为消息头和消息体,消息头中包含消息总长度(或者消息体长度)的字段,通常的设计思路为消息头的第一个字段使用int32来表示消息的总长度

  • 更复杂的应用层协议

常用解码器

  • LineBasedFrameDecoder
    这个解码器是通过遍历ByteBuf中的可读字节,当读取到 “\n” 或者是 “\r\n” 的,就以此位置为该包的结束位置。

  • StringDecoder
    这个解码器是将接收到的对象转换成字符串,然后给后面的handler调用。

  • DelimiterBaseFrameDecoder
    这个解码器是可以通过自定义的分隔符来确定包的结束位置。

  • FixedLengthFrameDecoder
    这个解码器是通过确定长度来对消息进行自动解码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值