之前我们介绍了 TCP 拆包/粘包的问题,以及如何使用 Netty 实现自定义协议的编解码。可以看到,网络通信的底层实现,Netty 都已经帮我们封装好了,我们只需要扩展 ChannelHandler 实现自定义的编解码逻辑即可。更加人性化的是,Netty 提供了很多开箱即用的解码器,这些解码器基本覆盖了 TCP 拆包/粘包的通用解决方案。本文章我们将对 Netty 常用的解码器进行讲解,一起探索下它们有哪些用法和技巧。

我们首先回顾一下 TCP 拆包/粘包的主流解决方案。并梳理出 Netty 对应的编码器类。

固定长度解码器 FixedLengthFrameDecoder

固定长度解码器 FixedLengthFrameDecoder 非常简单,直接通过构造函数设置固定长度的大小 frameLength,无论接收方一次获取多大的数据,都会严格按照 frameLength 进行解码。如果累积读取到长度大小为 frameLength 的消息,那么解码器认为已经获取到了一个完整的消息。如果消息长度小于 frameLength,FixedLengthFrameDecoder 解码器会一直等后续数据包的到达,直至获得完整的消息。下面我们通过一个例子感受一下使用 Netty 实现固定长度解码是多么简单。

public class EchoServer {public 

Netty 支持哪些常用的解码器?相关推荐

  1. Netty 支持的功能与特性

    按照定义来说,Netty 是一个异步.事件驱动的用来做高性能.高可靠性的网络应用框架.主要的优点有: 1. 框架设计优雅,底层模型随意切换适应不同的网络协议要求. 2. 提供很多标准的协议.安全.编码 ...

  2. android支持的视频音频硬解码器

    android支持的视频音频硬解码器 MediaCodec支持的有vp8 .VP9 .H.264.H.265.MPEG4.H.263等: MediaCodec支持的音频格式有3gpp.amr-wb.a ...

  3. SpringBoot对单元测试支持、常用单元测试功能使用实例

    SpringBoot 单元测试 Spring Boot 提供了许多注解和工具帮助开发人员测试应用,在其官方文档中也用了大量篇幅介绍单元测试的使用.在谷歌每周的 TGIF (ThanksGod, it' ...

  4. mqtt连接失败_Netty实战:如何让单机下Netty支持百万长连接?

    单机下能不能让我们的网络应用支持百万连接?可以,但是有很多的工作要做.而且要考虑到单机的系统资源消耗能否支撑百万并发 一.操作系统优化 首先就是要突破操作系统的限制. 在Linux平台上,无论编写客户 ...

  5. netty 支持多种通讯协议

    通讯协议,指的是把Netty通讯管道中的二进制流转换为对象.把对象转换成二进制流的过程.转换过程追根究底还是ChannelInboundHandler.ChannelOutboundHandler的实 ...

  6. ArcGIS支持的常用数据类型

    ArcGIS应该是目前为止功能最全面和强大的GIS平台软件,支持数据的种类也是比较全面的,下面就分别介绍一下ArcGIS支持的数据格式. ShapeFile Shapefile文件是美国环境系统研究所 ...

  7. Netty之四种常用 IO 模型

    四种常用 IO 模型: 同步阻塞 BIO: 最简单的 IO 模型,用户线程在读写时被阻塞. 数据拷贝指请求到的数据先存放在内核空间, 然后从内核空间拷贝至程序的缓冲区. 用户线程在 IO 过程中被阻塞 ...

  8. 总结Cnblogs支持的常用Markdown语法

    一.什么是Markdown Markdown是一种可以使用普通文本编辑器编写的标记语言, Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人用它写博客.世界上最流行的博客平台 ...

  9. Spring Boot如何实现在线预览?这个开源项目可以学习一下,支持99%常用文件!...

    Spring Boot上传文件,相信你一定会了.如果还不会的小伙伴,可以先看看之前的分享: Spring Boot 2.x基础教程:实现文件上传 Spring Boot 2.x基础教程:多文件的上传 ...

最新文章

  1. cuDNN 功能模块解析
  2. Kotlin let、with、run、apply、also函数的使用
  3. PHP中的urlencode,rawurlencode和JS中的encodeURI,encodeURIComponent
  4. 位操作:BitVector32结构 z
  5. 我的世界java版forge放在哪_我的世界1.9forge安装 怎么装forge教程
  6. html里span和div,HTML div和span
  7. java c 基本类型_java 基本数据类型
  8. 52个有效方法(1) - 了解Objective-C语言的起源
  9. 关于动态生成div的认识
  10. qt——QFileDialog使用对话框选取本地文件
  11. mysql 查询表注释
  12. fpcx教程:在Final Cut Pro中添加多语言字幕
  13. 安全教育平台账号后四位_安全教育平台账号登录入口https://www.xueanquan.com/
  14. Ubuntu中安装网易云音乐(可以直接打开的最简单的方法)
  15. GoAhead学习之GoForms
  16. uni-app运行到微信小程序模拟器
  17. 微信社群运营是什么,如何做好社群运营?
  18. 2015 android 5.0 手机排行榜,2015上半年顶级新款Android手机汇总
  19. 等比矩阵求和-POJ3233
  20. 购买学校计算机房加密狗的请示,2015关于扩建机房的请示.doc

热门文章

  1. CRMEB多商户1.4自购佣金显示错误问题修复方法
  2. 科研小白成长记31——顶会到此一游
  3. Rubby在青柠互动的一月份工作总结
  4. Oracle 生成流水号
  5. 将cooledit作为一个音频信号发生器(http://www.zsjys.net/JYJY/ShowArticle.asp?ArticleID=64)
  6. 网络架构革命 宽带提速升级
  7. 转拼音的 php 类文件夹,基于PHP语言汉语转拼音类
  8. 苹果恢复大师能正确使用时的各个软件版本
  9. 可变对像+元组与字典2020-11-10
  10. php 同学录设计与实现,同学录系统的设计与实现