netty解码及粘包问题

最近系统学习了一下netty,netty的框架着实让我上瘾,但是只是系统学习,不深入研究开发的时候也会碰到好多意想不到的问题,无从下手。
学习完netty框架 或者说TCP通讯以后数据传输中粘包问题。至于为什么出现粘包问题这里就不再陈述,能看到这篇博客应该是已经知道原因的。

疑问与答案

相信好多小伙伴都会有这样的问题,不如我使用了某种协议再netty中做开发,比如google的protobuf 或者websocket等等。。我还用不用再去处理粘包问题?
或者说粘包问题底层到底是怎么工作的?有这两个问题或者疑惑的我应该不是第一个也不是最后一个。今天咱们就研究一下。

答案一

自定义解码器或者可以说是一个简单的处理粘包问题的Handler。或不多说直接上代码,解释都在注释里边。

自定义解码器(处理粘包问题)
package nettytest;

import java.util.List;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import io.netty.handler.codec.TooLongFrameException;

public class FrameChunkDecoder extends ByteToMessageDecoder {
   
	/**
	 * 处理半粘包问题
	 * 如果固定每次读取2个 判断如果够2个就通知下一个handler去处理
	 * 如果 不够return 这里是等待下一个数据报 然后再去处理
	 * 假如  第一次发送 5个字节 那么他只会读 4个 剩下1个会等到下一个数据报来了再去读
	 */
	@Override
	protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
   
		// 每次读取两个
		if(in.readableBytes()<2) {
   
			//本人测试这里return 跟不return 效果是一样的数据再缓冲区 ByteBuf中不会丢失
//			return ;
		}else {
   
			ByteBuf buf = in.readBytes(2);
			System.out.println("读了"<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值