堆外内存增涨异常html
Netty 系列之 Netty 百万级推送服务设计要点git
如何设置Netty的接收Buffer为堆内存模式github
Netty 基本组件小结--Channel、EventLoop、Bootstrap等安全
netty4 UDP的使用socket
Multi threaded behavior with UDP server does not seem to work (4.0.6.Final) #1706:netty使用多个线程accept UDP。elasticsearch
Multi threaded UDP server with Nettyide
channel:socket的升级版,对应一个链接
EventLoopGroup:netty线程池
EventLoop:netty的线程,EventLoop对应不少个channel,一个channel只能对应一个EventLoop。UDP不是面向链接的,是面向报文的,因此一个端口就是一个NioDatagramChannel,只能对应一个EventLoop。因此默认状况下,只会有一个线程来处理UDP的accept,除非使用EpollEventLoopGroup(SO_REUSEPORT),本质上是多个线程监听同一个端口,经过OS作负载均衡。
NioEventLoop 中维护了一个线程和任务队列,支持异步提交执行任务。
Bootstrap 是客户端程序的启动引导类,UDP只能用Bootstrap。
ServerBootstrap 是服务端启动引导类,TCP server,定义分别指定boss和worker EventLoopGroup:netty。
ByteBuf:
pool和unpool:是否池话管理的内存
heap和direct:堆内存仍是堆外内存
safe和unsafe:是否容许使用堆外内存,直接读写堆外内存是不安全的,可能出现OS层面错误致使jvm core dump。-Dio.netty.noUnsafe=true使用堆内存。
相比于C语言的谁申请谁释放,netty则是谁最后使用谁释放。
writeAndFlush():
执行writeAndFlush,会把数据送到outHandler链。
Future 和 ChannelFuture:
提供了另外一种在操做完成时通知应用程序的方式。这个对象能够看做是一个异步操做的结果的占位符;它将在将来的某个时刻完成,并提供对其结果的访问。
ChannelPromise:
是ChannelFuture的扩展,容许设置I/O操做的结果,使ChannelFutureListener能够执行相关操做
Selector:
Netty 基于 Selector 对象实现 I/O 多路复用,经过 Selector 一个线程能够监听多个链接的 Channel 事件。
【ChannelHandler】:
ChannelHandler 是一个接口,处理 I/O 事件或拦截 I/O 操做,并将其转发到其 ChannelPipeline(业务处理链)中的下一个处理程序。
ChannelHandler 自己并无提供不少方法,由于这个接口有许多的方法须要实现,方便使用期间,能够继承它的子类:
ChannelInboundHandler 用于处理入站 I/O 事件。
ChannelOutboundHandler 用于处理出站 I/O 操做。
或者使用如下适配器类:
ChannelInboundHandlerAdapter 用于处理入站 I/O 事件。 ChannelOutboundHandlerAdapter 用于处理出站 I/O 操做。 ChannelDuplexHandler 用于处理入站和出站事件。