Netty笔记

堆外内存增涨异常html

Netty 系列之 Netty 百万级推送服务设计要点git

如何设置Netty的接收Buffer为堆内存模式github

Netty 基本组件小结--Channel、EventLoop、Bootstrap等安全

关于Netty的ByteBuff内存泄漏问题负载均衡

堆外内存的回收机制分析异步

Netty堆外内存回收原理详解jvm

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

追踪 Netty 异常占用堆外内存的经验分享

Netty堆外内存泄露排查盛宴

 

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 用于处理入站和出站事件。

相关文章
相关标签/搜索