温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Netty粘包问题的解决方法

发布时间:2021-08-07 16:05:29 来源:亿速云 阅读:93 作者:chen 栏目:云计算

本篇内容主要讲解“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粘包问题的解决方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI