Netty之网络编程数据编码

一、概况 我们在进行网络编程中会把各种数据转换为byte数据以便能在网络上传输,最常见的网络字节序——Little-Endian和Big-Endian,也让好多初进网络编程的新手摸不着头脑,还有按位或多位存储数据,按位或多位数据,BCD编码,ASCII编码,有符号数与无符号数的编码与解码等等。本篇博 ... »

netty 使用字典提升短文本的压缩效果

1 问题 术语:压缩率,compression ratio,压缩后的大小/压缩前的大小,越小说明压缩效果越好。 在使用netty的JdkZlibEncoder进行压缩时,发现了一个问题:它对于短文本(小于2K)的压缩效果很差,压缩率在80%-120%,文本越短,压缩效果越差,甚至可能比没压缩前更大。 ... »

Java使用Netty实现简单的RPC

造一个轮子,实现RPC调用 在写了一个Netty实现通信的简单例子后,萌发了自己实现RPC调用的想法,于是就开始进行了Netty-Rpc的工作,实现了一个简单的RPC调用工程。 如果也有兴趣动手造轮子的同学,可以先看看之前写的 使用Java实现Netty通信 这篇博客。 本文源地址:造一个RPC的轮 ... »

Netty源码死磕一(netty线程模型及EventLoop机制)

引言 好久没有写博客了,近期准备把 源码啃一遍。在这之前本想直接看源码,但是看到后面发现其实效率不高, 有些概念还是有必要回头再细啃的,特别是其线程模型以及 的概念。 当然在开始之前还是有务必要对 要有清晰准确的认识。 传送门 "" 事件循环机制(EventLoop) Netty线程模型中一个非常重 ... »

当Tomcat遇上Netty

故事背景 嘀~嘀~嘀~,生产事故,内存泄漏! 昨天下午,突然收到运维的消息,分部某系统生产环境内存泄漏了,帮忙排查一下。 排查过程 第一步,要日志 分部给到的异常日志大概是这样(鉴于公司规定禁止截图禁止拍照禁止外传任何信息,下面是我网上找到一张类似的报错): 这一看,不得了了,ByteBuf没有释放 ... »

简单的Java实现Netty进行通信

使用Java搭建一个简单的Netty通信例子 看过dubbo源码的同学应该都清楚,使用dubbo协议的底层通信是使用的netty进行交互,而最近看了dubbo的Netty部分后,自己写了个简单的Netty通信例子。 本文源地址: "实现Netty进行通信" 准备 工程截图 模块详解 rpc comm ... »

netty 入门

"文档" "使用手册" 近期公司通过 连接的的方式接了一个硬件设备,用了最基础的 类,参考的oracle的 "文档" 。 实现的比较简单,放在 "github" 上,不过这里应该用 才是正解。所以,过一下 的入门文档。 本文 "demo" 序言 问题 我们一般会用Http客户端库来调用web服务,获 ... »

客户端埋点实时OLAP指标计算方案

背景 产品经理想要实时查询一些指标数据,在新版本的APP上线之后,我们APP的一些质量指标,比如课堂连接掉线率,课堂内崩溃率,APP崩溃率等指标,以此来看APP升级之后上课的体验是否有所提升,上课质量是否有所提高,为下一步的APP升级做准备。 客户端埋点 按照需求打点,如果想知道某一指标如进入教室成 ... »

netty源码解解析(4.0)-16 ChannelHandler概览

本章开始分析ChannelHandler实现代码。ChannelHandler是netty为开发者提供的实现定制业务的主要接口,开发者在使用netty时,最主要的工作就是实现自己的ChannelHandler。ChannelHandler在设计上需要和ChannelPipeline配合共同实现pip ... »

Netty 客户端使用指数退避机制实现重连

指数退避 可以理解为每次重连失败时,就把重连时间设置为之前的指数级别。例如 2 秒,4 秒,8 秒...... 亚马逊AWS关于指数退避的两篇文章介绍 "AWS 中的错误重试和指数退避" "Exponential Backoff And Jitter" Netty客户端中使用指数退避方式重连 客户端 ... »

探究netty的观察者设计模式

javadoc笔记点 观察者的核心思想就是,在适当的时机回调观察者的指定动作函数 我们知道,在使用netty创建channel时,一般都是把这个channel设置成非阻塞的模式,这意味着什么呢? 意味着所有io操作一经调用,即刻返回 这让netty对io的吞吐量有了飞跃性的提升,但是异步编程相对于传 ... »

Netty中的装饰者模式

装饰者的应用 所谓装饰者,说白了,目的就是对现有的对象进行增强, 装饰者设计模式最大的优点就是,它在扩展类原有功能的基础上还避免的类爆炸的情况 Netty中的装饰者模式的应用 是netty中重要的数据容器类,我们看它是如何设计的,如下图 我们可以看到, 的直接实现类有五个,忽略 这个类,其实直接实现 ... »

Netty中的责任链模式

适用场景: 对于一个请求来说,如果有个对象都有机会处理它,而且不明确到底是哪个对象会处理请求时,我们可以考虑使用责任链模式实现它,让请求从链的头部往后移动,直到链上的一个节点成功处理了它为止 优点: 发送者不需要知道自己发送的这个请求到底会被哪个对象处理掉,实现了发送者和接受者的解耦 简化了发送者对 ... »

Netty中的策略者模式

策略者模式的特点 在设计类的继承体系时,我们会刻意的把公共的部分都提取到基类中 比如先设计Person类,把人类都具有的行为放到这个Person,特有的行为设计成抽象方法,让子类具体去实现, 这样后续无论我们再去构造学生,还是构造老师,大家都继承Person,就达到了代码复用的目的 但是这样问题就来 ... »

Netty编码流程及WriteAndFlush()的实现

编码器的执行时机 首先, 我们想通过服务端,往客户端发送数据, 通常我们会调用 的方式, 入参位置的数据可能是基本数据类型,也可能对象 其次,编码器同样属于handler,只不过他是特化的专门用于编码作用的handler, 在我们的消息真正写入jdk底层的ByteBuffer时前,数据需要经过编码处 ... »

Netty-解码器架构与常用解码器

任何数据类型想在网络中进行传输,都得经过编解码转换成字节流 在netty中,服务端和客户端进行通信的其实是下面这样的 程序 编码 网络 网路 解码 程序 对应服务端: 入站数据, 经过解码器解码后给后续的handler使用 出站数据, 结果编码器编码成字节流给在网络上传播 在netty中的编码器其实 ... »