netty
文章平均质量分 79
Netty 是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务器和客户端。
CodingAnHour
明日复明日,明日何其多。我生待明日,万事成蹉跎。
展开
-
netty黑白名单RuleBasedIpFilter、同一个 IP 只能有一个连接UniqueIpFilter
根据netty中io.netty.handler.ipfilter包下实现。netty先建立链接之后通过pipeline中handler过滤cidr(无分类域)原理实现的原创 2022-08-17 23:08:04 · 1097 阅读 · 0 评论 -
netty根据业务场景(IO密集型、CPU密集型)优化线程模型
CPU 密集型:运算型(科学计算等,不需要`依赖太多的外部资源`)IO 密集型:等待型(调用微服务、数据库、远程服务等需要等待服务端返回)整改线程模型:独立出 “线程池”来处理业务,`不在和NioEventLoopGroup做共享,解决IO抢占资源的问题`,如果IO处理不及时就会影响业务处理效率。所以采用线程池提升业务效率......原创 2022-08-17 00:17:12 · 760 阅读 · 0 评论 -
netty内存泄露检测
netty检测内存泄漏的核心:引用计数器(buffer.refCnt())+弱引用DefaultResourceLeak(WeakReference)ResourceLeakDetector(内存泄露检测工具类)new ByteBuf时会调用此方法。原创 2022-08-16 22:34:13 · 554 阅读 · 0 评论 -
netty 完善线程及Handler名称、netty的日志
2-1:代表的是bossGrup,3-1:代表的是workerGrup。netty代码时经常会遇到这种奇怪的线程名字,到底是什么?Handler中#0,$1#0又是什么鬼?设置netty日志级别查看LoggingHandler构造方法如图。netty源码是如何编译过的呢,如图,添加日志handler。...原创 2022-08-15 23:40:31 · 1062 阅读 · 0 评论 -
Netty注解@Sharable、@Skip、@UnstableApi、@SuppressJava6Requirement、@SuppressForbidden
在jdk10一下,使用docker容器初始化Group时获计算cpu核数时Runtime.getRuntime().availableProcessors()),获取的是宿主机的cpu核数。如果非共享的Handler重复加入就会抛出异常,提示非共享Handler不能重复加入,在cash中同时会断开链接。https://github.com/policeman-tools/forbidden-apis/去除 “禁用” 报警,forbidden组件会在编译(maven compile)阶段。...原创 2022-08-15 22:05:24 · 1142 阅读 · 0 评论 -
Netty 心跳机制及断线重连
netty 的服务端一般情况下不需要断线重连,应为服务端服务宕机就只能重新启动服务;空闲检测就是每隔一段时间检测子通道是否有数据读写,如果有,则子通道是正常的;如果没有,则子通道被判定为假死,关掉子通道。心跳检测是在TCP长连接中,客户端和服务端定时向对方发送数据包通知对方自己还在线,保证连接的有效性的一种机制。添加IdleStateHandler心跳检测处理器,并添加自定义处理Handler类。断线重连是指由于发生网络故障而导致服务中断的情况,客户端就需要从重新连接服务端;方法作为超时事件的逻辑处理;..原创 2022-08-02 23:05:36 · 2918 阅读 · 1 评论 -
Netty粘包拆包、自定义Protostuff编解码器
TCP是一个“流”协议,所谓流,就是没有界限的一长串二进制数据。TCP作为传输层协议并不了解上层业务数据的具体含义,会根据TCP缓冲区的实际情况进行数据包的划分;所以在业务上认为是一个完整的包,可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。protostuff是一个开箱即用的序列化库,使用非常简单。protostuff是二进制的,因此性能比json等方式高。...原创 2022-08-02 21:42:58 · 1825 阅读 · 0 评论 -
Netty 编解码与自定义编解码
实现一个解码器,首先要继承ByteToMessageDecoder抽象类,然后实现其基类的decode()抽象方法。继承ByteToMessageDecoder抽象类。实现基类的decode()抽象方法,将ByteBuf到目标POJO的解码逻辑写入此方法,以将ByteBuf中的二进制数据解码成一个一个的JavaPOJO对象。解码完成后,需要将解码后的JavaPOJO对象放入decode()方法的List实参中,此实参是父类所传入的解码结果收集容器。......原创 2022-08-01 17:10:01 · 1568 阅读 · 0 评论 -
Netty的零拷贝(Zero-Copy)
Netty提供CompositeByteBuf组合缓冲区类,可以将多个ByteBuf合并为一个逻辑上的ByteBufer,避免了各个ByteBufer之间的拷贝,将几个小buffer合并成一个大buffer的繁琐操作。Netty中的零拷贝和操作系统层面上的零拷贝是有区别的,不能混淆,Netty零拷贝完全是基于Java层面或者说用户空间的,它更多的是偏向于应用中的数据操作优化,而不是系统层面的操作优化。Netty的零拷贝(Zero-Copy)主要体现在五个方面。,使用堆外直接内存进行Socket读写,...原创 2022-07-31 22:17:07 · 2704 阅读 · 1 评论 -
Reactor模式、Netty线程模型、Netty基本类说明
当然,服务器的监听线程也是独立的,任何socket连接的输入和输出处理都不会阻塞到后面新socket连接的监听和建立,这样服务器的吞吐量就得到了提升。这种方法的最大问题是如果前一个网络连接的handle(socket)没有处理完,那么后面的新连接无法被服务端接收,于是后面的请求就会被阻塞,导致服务器的吞吐量太低。单线程Reactor模式是基于Java的NIO实现的。相对于传统的多线程OIO,Reactor模式不再需要启动成千上万条线程,避免了线程上下文的频繁切换,服务端的效率自然是大大提升了。.......原创 2022-07-25 21:05:15 · 628 阅读 · 0 评论 -
JAVA IO模型BIO、NIO、AIO、Linux操作系统中文件句柄数的限制
NIO整个调用流程就是Java调用了操作系统的内核函数来创建Socket,获取到Socket的文件描述符,再创建一个Selector对象,对应操作系统的Epoll描述符,将获取到的Socket连接的文件描述符的事件绑定到Selector对应的Epoll文件描述符上,进行事件的异步通知,这样就实现了使用一条线程,并且不需要太多的无效的遍历,将事件处理交给了操作系统内核(操作系统中断程序实现),大大提高了效率。我们应用程序是跑在用户空间的,它不存在实质的IO过程,真正的IO是在操作系统执行的。......原创 2022-07-20 23:24:01 · 628 阅读 · 0 评论 -
Netty是什么、为什么用Netty、为什么Netty选择NIO而非AIO
基于Netty,可以快速轻松地开发网络服务器和客户端的应用程序。与直接使用JavaNIO相比,Netty给大家造出了一个非常优美的轮子,它可以大大简化网络编程流程。Netty是一个异步的、事件驱动的、用来做高性能高可靠性的网络应用框架。Netty是一个JavaNIO客户端/服务器框架,是一个为了。Netty支持的功能及特性如图。......原创 2022-07-23 22:26:35 · 594 阅读 · 0 评论 -
Java NIO 缓冲区Buffer、通道Channel、选择器Selector
缓冲区Buffer、选择器Selector、通道Channel是JavaNIO的三个核心对象。原创 2022-07-23 15:40:05 · 414 阅读 · 0 评论