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面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Git安装教程(详细教程)

    Git安装教程(详细教程)Git安装教程大家好,今天我们来学习一下怎么安装git这个软件,好好看,好好学,超详细的。第一步下载git(找到自己需要的版本)第二步下载完点击安装包进入使用许可声明界面第三步点击Next进入选择安装路径界面这里我是选择装在D盘,大家如果嫌麻烦就默认安装在C盘第四步点击Next进入选择安装组件界面上图红框内的选项是默认勾选的,建议不要动。绿色框1是决定是否在桌面创建快捷方式的。绿色框2是决定在所有控制台窗口中使用TrueType字体和是否每天检查Git

    2022年5月1日
    47
  • acwing-393. 雇佣收银员(差分约束)

    acwing-393. 雇佣收银员(差分约束)一家超市要每天 24 小时营业,为了满足营业需求,需要雇佣一大批收银员。已知不同时间段需要的收银员数量不同,为了能够雇佣尽可能少的人员,从而减少成本,这家超市的经理请你来帮忙出谋划策。经理为你提供了一个各个时间段收银员最小需求数量的清单 R(0),R(1),R(2),…,R(23)。R(0) 表示午夜 00:00 到凌晨 01:00 的最小需求数量,R(1) 表示凌晨 01:00 到凌晨 02:00 的最小需求数量,以此类推。一共有 N 个合格的申请人申请岗位,第 i 个申请人可以从 ti 时刻开始

    2022年8月9日
    10
  • 代码实现二叉树的三种遍历_遍历二叉树口诀

    代码实现二叉树的三种遍历_遍历二叉树口诀文章目录一、图示理解(图片是一位前辈所留,在此感谢)1、先序遍历2、中序遍历3、后序遍历4、层序遍历二、深入理解三种遍历让我们来理解一下绕着外围跑一整圈的真正含义是:遍历所有结点时,都先往左孩子走,再往右孩子走。下面做一个实例吧三、代码实现加以理解以下是C语言全部代码实现下面是同样的例子用c++实现,大家可以参考一下一、图示理解(图片是一位前辈所留,在此感谢)1、先序遍历先序遍历可以想象成,…

    2022年8月18日
    5
  • webkit内核的浏览器常见7种分别是..[通俗易懂]

    webkit内核的浏览器常见7种分别是..[通俗易懂]GoogleChromeSafari遨游浏览器3.x搜狗浏览器阿里云浏览器QQ浏览器360浏览器…

    2022年8月1日
    3
  • Ubuntu安装ssh服务详细过程[通俗易懂]

    SSH服务简介(来自百度百科)SSH为SecureShell的缩写,由IETF的网络小组(NetworkWorkingGroup)所制定;SSH为建立在应用层基础上的安全协议。SSH是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、.

    2022年4月6日
    60
  • 浏览器offsetWidth、clientWidth、scrollWith等总结

    浏览器offsetWidth、clientWidth、scrollWith等总结  对象尺寸会涉及width和height,我们以width为例,height则是一样的道理。  1、clientWidth:对象可见的宽度,不包括滚动条等边线,会随窗口的显示大小改变。  clientWidth = 元素width+padding  2、scrollWidth:实际内容的宽,不包括边线宽度,会随着对象中内容的多少改变。  无滚动时等于c…

    2022年7月22日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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