netty拆包_拆包技巧

netty拆包_拆包技巧面试官:讲一讲Netty粘包拆包

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

哈喽!大家好,我是小奇,一位热爱分享的程序员
小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。

一、前言

书接上回,昨天肯定是狗蛋通风报信,导致大爷们那么神秘的下象棋基地也被大妈捣毁了,今天肯定去下不了象棋了。

那我今天趁着天气好去地里干活吧,找不到工作就先下地干活吧,来到地里看见隔壁小丽姐跟他妈在地里正干活呢。

在这里插入图片描述

我:小丽姐,你怎么穿成这样就下地干活来了,你这样让别人还怎么干活?

小丽姐:我这还算正常的,你去东边地里看看你小娜姐,她穿黑丝就来掰棒子了。

我:不是吧,现在种地也这么卷了吗?我还就不信了,我偏去看看。

在这里插入图片描述

我:小娜姐,刚刚小丽姐说你穿黑丝来干活我还不信,现在看来真的是我落后了吗?怎么掰个棒子也这么卷。

小娜姐:没办法呀,以前都正常穿什么事情没有,现在有人开始不好好穿了,都开始了,我也不想卷,但是你不穿哪有男人来帮你干活呀。

我:领教了,终究还是我太年轻。。。我还是去看看张大婶活干的怎么样了,还想跟她借铁锹呢。

在这里插入图片描述

我:张大婶,活快干好了吗,借我用用铁锹呗。

张大婶:你整天就知道美女美女的,还用种地啊。

我:没办法嘛,现在形势不太好,只能弄一下这一亩三分地了。

正当我跟张大婶谈天说地的时候,我的电话响了。

我:“喂您好”。

对面:“您好,请问是小奇吗”。

我:“是我,你是?”。

对面:“我是XXX公司的,我看到hr推给我你的简历,我感觉还不错,你什么时候方便来现场面试一下”。

我:“现在不方便现场面试了”。

对面:“好吧,那你现在方便吗?我们现在线上面试一下吧”。

我:“好的”。

二、面试

面试官:我看你简历上写的精通Netty,那你能简单说什么是粘包和拆包吗?

我:粘包和拆包是在进行TCP数据传输的时候所造成的一种现象。

因为TCP是一个流协议,他发送的数据是一个没有界限的长串的二进制数据,TCP在发送数据之前会将数据放入缓存区。

如果缓存区没有满,就会把多个数据都放入缓存区,然后共同发送出去,这就叫粘包。

如果一条数据缓存区就放不下,那么就需要将数据分为多次发送出去,这就叫拆包。

面试官:那我不能客户端发送一条数据就传过去一条数据吗?

我:不可以,客户端属于上层协议,比如我们输入一个张三,他最终会通过底层协议TCP来发送,TCP不管你上层发了几次,它只管自己的缓存区有没有满,满了就发送。

所以如果你客户端发送两个人的姓名,例如第一次发送“张三”,第二次发送“李四”。但是通过TCP这里发生粘包,最终到达服务端那里接收的只有一条消息就是“张三李四”。

面试官:嗯。那我们有什么好的解决方式吗?

我:一般有如下几种解决方式

1:消息定长度:将传输的数据大小固定长度,比如我们固定长度为100个字节,当我们发送“张三”的时候我们就要把不够的空位空格补齐,这样就直接发送出去了,不会粘包了。

2:特殊符号分割:我们用一些特殊符号,比如下划线等来将消息之间分割来开,服务端接收到消息后遇到分隔符就知道是下一条数据了,但是这个分隔符注意一定不要在发送的数据中也有,这样会造成数据不完整。

3:发送长度:每次发送一条数据就将这条数据的长度一并发送,例如可以使用消息头来存储长度,消息体来发送真正的数据,这样服务端可以根据长度来判断数据是否接收完毕。

这个时候如果我们确定了使用哪种方式解决后我们就可以使用对应的解码器了。

回车换行分包解码器:LineBasedFrameDecoder

特殊分隔符分包解码器:DelimiterBasedFrameDecoder

固定长度报文分包解码器:FixedLengthFrameDecoder

面试官:“小伙子不错呀,什么时候能回北京入职呢”

我:“额。。。等等吧,现在还有好多家公司等着谈薪资呢,我得挑一家合适的。”

面试官:“你要多少我都给你,来我这吧”

我:“额。。。那就月薪100个W吧”。

面试官:“喂,你说什么我听不见,信号不好。。。”

我:“喂喂喂”(嘟嘟嘟嘟嘟嘟嘟嘟。。。)。

三、总结

这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。

文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。

如果觉得我的文章还不错的话就点个赞吧,另外可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/169715.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • C++隐藏规则

    在面向对象的开发过程中,经常出现类的继承,这里面出现的成员函数的重载(overload)、覆盖(override)与隐藏(hidden)很容易混淆。首先澄清这3个概念:重载覆盖(派生类函数覆盖基

    2021年12月22日
  • APAP INCLUDE「建议收藏」

    APAP INCLUDE「建议收藏」*&———————————————————————**&ReportYMWXBINCLUDE*&*&———————————————————————**&…

  • 基于Linux安装redis

    基于Linux安装redis一、下载redis压缩包进入redis官网https://download.redis.io/releases/选择要下载的版本将下载好的压缩包使用Xftp上传至Linux系统中或者直接在Linux中使用命令直接下载wgethttps://download.redis.io/releases/redis-4.0.0.tar.gz使用tar命令解压tarxzfredis-4.0.0.tar.gz二、安装redis进入redis文件夹中,使…

  • cas 6.2 Incompatible because this component declares an API of a component compatible with Java 11

    cas 6.2 Incompatible because this component declares an API of a component compatible with Java 11

  • ajax最常见的几种面试题

    ajax最常见的几种面试题1,什么是ajax?请谈一下你对ajax的认识AJAX是“AsynchronousJavaScriptandXML”的缩写。他是指一种创建交互式网页应用的开发技术。ajax包含下列技术:基于web标准XHTML+CSS表示;使用dom进行动态显示及交互;使用xml和xslt进行数据交换及相关操作;使用xmlhttprequest进行异步数据查询,检索;使用Java…

  • 数据结构之图的基本概念建议收藏

    一图的定义定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。在图中需要注意的是:(1)

    2021年12月19日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号