一、传统NIO架构

step1. 我们传统的nio架构已经解决了多路复用,零拷贝等问题,已经十分优秀了,那为什么我们现在Netty如此火热呢?

1) 首先他使用简单,基本上都是模板化,我们可以更专注业务。具体使用可参考Netty介绍及实战

2)社区活跃,成熟稳定。

3)提供编解码功能,和处理粘包、拆包的功能。

4)替我们修复了NIO的大量bug , 不需要考虑复杂的网络协议。

step2.什么是粘包、拆包?

1)上图我们可以看到,所有的message都会放到我们对应的缓冲区当中。

缓冲区:TCP在接受数据的时候,有一个滑动窗口来控制接受数据的大小,这个滑动窗口你就可以理解为一个缓冲区。
        case1:右上第一个消息:当一个消息过大,我们TCP缓冲区放不下了,那就会产生拆包,剩下的message会在下一次请求中传递过来。

case2:右上第二第三条消息:每个message的长度比较小,TCP将多次写入的消息一次性的发送出去。

case3:报文长度大于最大报文长度也会出现拆包。

二、Netty架构

step1.network application framework

step2. Netty server architecture

Step3.一个简单数据接收,响应的流程图

1)一个加密数据传输过来,首先经过我们的handler去找到对应的channel去处理,然后将报文交给解密的handler去解析报文,之后将数据传递给业务端,业务端处理之后,再次将响应报文encode之后传递出去(代码:Netty介绍及实战)。

Step4.netty如何处理粘包,拆包呢?

设想,如果一个数据来了如果我不知道数据的具体长度,我们怎么能精准的拆包呢。

所以我们可以在报文的头部,用一部分字节来去标记整条报文的长度,这样按照长度去读取,这样不就可以精准的获取到原始的每一条报文结构了么。于是Netty也提供了这个方法:

LengthFieldBasedFrameDecoder 它是基于消息头指定消息长度进行粘包拆包处理的。

还有其他不同类型的拆包方法,大家也可以再了解一下。如有错误欢迎指出,共同学习!

Netty介绍与实战(三)之粘包拆包相关推荐

  1. 一起学Netty(六)之 TCP粘包拆包场景

    TCP编程底层都有粘包和拆包机制,因为我们在C/S这种传输模型下,以TCP协议传输的时候,在网络中的byte其实就像是河水,TCP就像一个搬运工,将这流水从一端转送到另一端,这时又分两种情况: 1)如 ...

  2. netty权威指南学习笔记三——TCP粘包/拆包之粘包现象

    TCP是个流协议,流没有一定界限.TCP底层不了解业务,他会根据TCP缓冲区的实际情况进行包划分,在业务上,一个业务完整的包,可能会被TCP底层拆分为多个包进行发送,也可能多个小包组合成一个大的数据包 ...

  3. Netty(二)——TCP粘包/拆包

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7814644.html 前面讲到:Netty(一)--Netty入门程序 主要内容: TCP粘包/拆包的基础知 ...

  4. 「 计算机网络 」TCP的粘包拆包问题

    「 计算机网络 」TCP的粘包/拆包问题 参考&鸣谢 大病初愈,一分钟看懂TCP粘包拆包 雷小帅 TCP 的粘包拆包以及解决方案 一乐说 文章目录 「 计算机网络 」TCP的粘包/拆包问题 一 ...

  5. TCP粘包/拆包问题

    目录 TCP粘包/拆包 TCP粘包/拆包问题说明 TCP粘包/拆包发生的原因 粘包问题的解决策略 未考虑TCP粘包导致功能异常案例  TimeServer的改造 TimeClient的改造 利用Lin ...

  6. TCP——粘包/拆包

    TCP粘包/拆包 TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,它们是连成一片的,其间并没有分界线.TCP底层并不了解上层业务数据的具体含义,它会根 ...

  7. Netty 粘包 拆包 编码 解码 序列化 介绍

    目录: 粘包 & 拆包及解决方案 ByteToMessageDecoder 基于长度编解码器 基于分割符的编解码器 google 的 Protobuf 序列化介绍 其他的 前言 Netty 作 ...

  8. netty解决TCP粘包/拆包导致的半包读写问题的三种方案

    解决方案一:LineBasedFrameDecoder+StringDecoder来解决TCP的粘包/拆包问题 只需要在客户端和服务端加上45.46两行代码并且在发送消息的时候加上换行符即可解决TCP ...

  9. Netty介绍及实战(二)之IO与NIO和多路复用与零拷贝

    Netty介绍及实战(一) 一.Netty到底是什么?什么是多路复用?什么叫做零拷贝? Netty是一个NIO客户端服务器框架,可以快速.轻松地开发协议服务器和客户端等网络应用程序.它极大地简化和简化 ...

最新文章

  1. SunlightChain 区块链宣言
  2. 表单实例(判断两次密码是否一致)
  3. 如何才能学好python编程零基础_Python脚本该怎么学,零基础也可以学好Python编程吗?...
  4. [云炬商业计划书阅读分享]无水洗车市场推广策划书
  5. c语言 int转char_c语言的函数指针
  6. jzoj4019-Path【dp】
  7. django get和filter方法的几点不同
  8. html颜色对话框,网页颜色对话框的使用
  9. 2021年内衣品牌营销传播方案-婧麒+美柚.pdf(附下载链接)
  10. 像python一样运行js的__main__
  11. sprintf 详解
  12. Fast marching on 3D meshes with diffusion distance
  13. Javascript jquery css 写的简单进度条控件
  14. python - bs4提取XML/HTML中某个标签下的属性
  15. 解决OpenCV编译时./bin: error while loading shared libraries: libopencv_highgui.so.3.2: cannot open的问题
  16. 【SPOJ - DQUERY】D-query【主席树 —— 区间中不同数的个数】
  17. APP的原型制作流程
  18. 项目管理案例分析:如何通过黄金圈法则建立共识?
  19. 100本软件开发最佳书籍排行榜
  20. 职教云python程序设计答案_智慧职教云课堂APPPython程序设计题目答案

热门文章

  1. 历经24小时,依靠全球定位,帮女朋友找回丢失的华为手机!
  2. 视频监控方面部分基础知识
  3. 坦克大战项目c语言代码,c语言 坦克大战 游戏源码下载
  4. AirSim学习和踩坑记录(不定时更新)
  5. js实现京东购物放大镜和选项卡效果
  6. 隧道二衬钢筋(一键生成)
  7. 台式计算机的主流配置,现在台式电脑主流配置是什么配置?
  8. 关于switch的一些理解
  9. FPGA实现开根号,仿真通过,算一次需要34个时钟周期
  10. Weka package manager 出错的解决办法