关于java:面试官什么是Netty粘包拆包怎么解决Netty粘包拆包问题

3次阅读

共计 1897 个字符,预计需要花费 5 分钟才能阅读完成。

哈喽!大家好,我是小奇,一位酷爱分享的程序员
小奇打算以轻松风趣的对话形式来分享一些技术,如果你感觉通过小奇的文章学到了货色,那就给小奇一个赞吧
文章继续更新,能够微信搜寻【小奇 JAVA 面试】第一工夫浏览,回复【材料】更有我为大家筹备的福利哟!回复【我的项目】有我为大家筹备的一些我的项目源码。回复【简历模板】有我为大家筹备的简历模板。

一、前言

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

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

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

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

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

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

小娜姐:没方法呀,以前都失常穿什么事件没有,当初有人开始不好好穿了,都开始了,我也不想卷,然而你不穿哪有男人来帮你干活呀。

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

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

张大婶:你终日就晓得美女美女的,还用种地啊。

我:没方法嘛,当初局势不太好,只能弄一下这一亩三分地了。

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

我:“喂您好”。

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

我:“是我,你是?”。

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

我:“当初不不便现场面试了”。

对面:“好吧,那你当初不便吗?咱们当初线上面试一下吧”。

我:“好的”。

二、面试

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

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

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

如果缓存区没有满,就会把多个数据都放入缓存区,而后独特发送进来,这就叫粘包。

如果一条数据缓存区就放不下,那么就须要将数据分为屡次发送进来,这就叫拆包。

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

我:不能够,客户端属于下层协定,比方咱们输出一个张三,他最终会通过底层协定 TCP 来发送,TCP 不论你下层发了几次,它只管本人的缓存区有没有满,满了就发送。

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

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

我:个别有如下几种解决形式

1:音讯定长度:将传输的数据大小固定长度,比方咱们固定长度为 100 个字节,当咱们发送“张三”的时候咱们就要把不够的空位空格补齐,这样就间接发送进来了,不会粘包了。

2:特殊符号宰割:咱们用一些特殊符号,比方下划线等来将音讯之间宰割来开,服务端接管到音讯后遇到分隔符就晓得是下一条数据了,然而这个分隔符留神肯定不要在发送的数据中也有,这样会造成数据不残缺。

3:发送长度:每次发送一条数据就将这条数据的长度一并发送,例如能够应用音讯头来存储长度,音讯体来发送真正的数据,这样服务端能够依据长度来判断数据是否接管结束。

这个时候如果咱们确定了应用哪种形式解决后咱们就能够应用对应的解码器了。

回车换行分包解码器:LineBasedFrameDecoder

非凡分隔符分包解码器:DelimiterBasedFrameDecoder

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

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

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

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

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

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

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

三、总结

这里的相干内容还没有整顿结束,文章前面继续更新,倡议珍藏。

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

如果感觉我的文章还不错的话就点个赞吧,另外能够微信搜寻【小奇 JAVA 面试】第一工夫浏览,回复【材料】更有我为大家筹备的福利哟!回复【我的项目】有我为大家筹备的一些我的项目源码。回复【简历模板】有我为大家筹备的简历模板。

正文完
 0