netty server怎样解决粘包问题
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,netty server怎样解决粘包问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、什么是粘包/拆包一般所谓的TC
千家信息网最后更新 2025年02月02日netty server怎样解决粘包问题
netty server怎样解决粘包问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
1、什么是粘包/拆包
一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。
2、解决办法
2.1、消息定长,报文大小固定长度,不够空格补全,发送和接收方遵循相同的约定,这样即使粘包了通过接收方编程实现获取定长报文也能区分。
2.2、包尾添加特殊分隔符,例如每条报文结束都添加回车换行符(例如FTP协议)或者指定特殊字符作为报文分隔符,接收方通过特殊分隔符切分报文区分。
2.3、将消息分为消息头和消息体,消息头中包含表示信息的总长度(或者消息体长度)的字段
3、netty server端设置特殊分隔符
注意:分隔符一定要在数据处理的handler之前指定
@Componentpublic class NettyServer { @Value("${netty.server.port}") private int port; /** * 启动 netty server * @throws InterruptedException */ public void start() { EventLoopGroup parentGroup = new NioEventLoopGroup(); EventLoopGroup childGroup = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(parentGroup, childGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, Integer.parseInt(CommonUtils.getConfig("ChannelOption.SO_BACKLOG"))) // 设置线程队列得到连接个数 .option(ChannelOption.SO_KEEPALIVE, true) // 设置保持连接的活动状态 .childHandler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel ch) { // 注意消息分隔符处理的handler一定要在消息处理逻辑前面 ByteBuf buf = Unpooled.copiedBuffer("\t", Charset.defaultCharset());//自定义拆包字符 //(1024)解码的帧的最大长度,false(拆包是否去掉指定字符),buf(拆包字符) DelimiterBasedFrameDecoder delimiterBasedFrameDecoder = new DelimiterBasedFrameDecoder(1400, true, buf); ch.pipeline().addLast(delimiterBasedFrameDecoder); ch.pipeline().addLast(new NettyServerHandler2()); } }); ChannelFuture channelFuture = serverBootstrap.bind(port).sync(); channelFuture.channel().closeFuture().sync(); } catch (InterruptedException e) { e.printStackTrace(); } finally { try { parentGroup.shutdownGracefully().sync(); childGroup.shutdownGracefully().sync(); } catch (InterruptedException e) { e.printStackTrace(); } } }}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
消息
数据
分隔符
处理
报文
特殊
字符
长度
收方
通讯
定长
帮助
应用
问题
清楚
相同
不够
个数
内容
办法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
医院网络安全日常运行维护
软件开发连锁吴通控股
日不落的希望免费服务器
管理web服务器8项工作
服务器网络日志如何下载
胭脂扣小说软件开发
编程网络技术与应用
oracel数据库表新增字段
服务器电源改6pin
没有原型怎么设计数据库表
学校校园网络安全管理预案
普源数据库连接失败
淮安有做服务器的公司吗
软件开发的四种方法
kali网络安全实验
网络技术与云计算
软件开发多少钱每天
国家网络安全法题目有答案
网络安全构成威胁的类型
发票开成软件还是软件开发服务费
实时数据 文件 数据库
1t的文件传到服务器上
腾讯云服务器运行日志在哪
乐亭辅助网络技术不二之选
国际银行软件开发商名单
互联网的科技变化
郑州移动宽带服务器
网络安全密匙在哪查看
华美是网络安全公司吗
重装战姬太平洋服务器是什么服