本篇内容主要讲解“Netty粘包问题的解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Netty粘包问题的解决方法”吧!
我们知道,netty当中有boss线程和worker线程,通常是1对多的关系,可以理解为boss接到客户的请求之后,分配给其中一个worker去处理,如果客户过多,可能会出现一个worker服务多个客户的情况。这是背景。
按照我的理解,粘包问题解决的关键在于2点,1、接收到数据在无法得到及时解析的情况下,得有地方给它存下来;2、缓冲区指针的任意移动;恰好,这两点netty都能够很轻易的。下面是代码,因为公司的保密需求,将会隐去具体业务部分。
public class ProtocolAnaDecoder extends ByteToMessageDecoder {
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, Listout) throws Exception { Object decoded = null;
while(true){
decoded = decode(ctx, in);
if (decoded != null) {
out.add(decoded);
} else{
return;
}
}
}
private Object decode(ChannelHandlerContext ctx, ByteBuf in) {
//标记当前读指针位置
in.markReaderIndex();
while(in.isReadable()){
byte b = in.readByte();
//业务处理部分,如果获得一个正确的消息对象,直接返回
}
//如果没有得到任何消息对象,重置读指针位置(之前mark的位置)。 in.resetReaderIndex();
return null;
}
}
到此,相信大家对“Netty粘包问题的解决方法”有了更深的了解,不妨来实际操作一番吧!这里是辰讯云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读: linux如何删除当前文件所有内容