Netty学习笔记

何为Netty Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。 何为事件驱动 事件处理的两道工序: 方法 说明 事件分离器(Event Demultiplexer) 将事件源(socket/file)的I/O时间分离出来(IO就绪事件,IO完成事件), ... »

如何设计一个高性能网关

一、前言 ​ 最近在github上看了soul网关的设计,突然就来了兴趣准备自己从零开始写一个高性能的网关。经过两周时间的开发,我的网关ship-gate核心功能基本都已完成,最大的缺陷就是前端功底太差没有管理后台 »

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,就达到了代码复用的目的 但是这样问题就来 ... »