Netty的核心组件

一  Channel

    Channel是Java NIO的一个基本构造

    Channel 看作 传入(入站)或者传出(出站)数据的载体

    也可以是 打开或关闭 ,连接或者 断开连接

 

二 回调

   一个回调其实就是一个方法,一个指向已经被提供给另外一个方法的方法引用

 Netty 在内部使用回调处理事件

 

三 Future

 提供了另一种在操作完成时通知应用程序的方式。这个对象可以看作是一个异步操作的结果的占位符;它将在末来的某个时刻完成,并提供对其结果的 访问。

 

四 事件和ChannelHandler

   Netty 使用不同的事件来通知我们状态的改变或者是操作的状态。

   这使得我们能够基于已经发生的事件来 触发适当的动作。

  这些动作是:

  1)记录日志

  2)数据转换

  3)流控制

  4)应用程序逻辑 

 

Netty是一个网络编程框架,所以events按它们和输入或者输出数据流的关系来分类。

可能被输入数据或者相关状态改变触发的events包括:

  • 活跃或者停用的连接
  • 读数据
  • 用户events
  • 错误events

而输出event则是会触发将来行为的操作的结果,可能会是:

  • 打开或者关闭到远端的连接
  • 写或者刷数据到一个socket

ChannelHandler 接口

类型描述
handlerAdded ChannelHandler添加到ChannelPipeline时被调用
handlerRemoved ChannelHandler从ChannelPipeline时被调用
exceptionCaught 处理过程中ChannelPipeline有错误

ChannelInBoundHandler接口

  • SimpleChannelInBoundHandler 会自动释放资源,调用了 ReferenceCountUtil.release(msg);

ChannelOutBoundHandler接口

可按需推迟操作和事件。大部分方法都接收一个ChannelPromise参数[ChannelFuture的一个子类]

这里借鉴的是 Scala 的 Promise 和 Future 的设计,当一个 Promise 被完成之后,其对应的 Future 的值便 不能再进行任何修改了。

ChannelHandler

ChannelHandler用于处理Channel对应的事件
ChannelHandler接口里面只定义了三个生命周期方法,我们主要实现它的子接口ChannelInboundHandler和ChannelOutboundHandler,为了便利,框架提供了ChannelInboundHandlerAdapter,ChannelOutboundHandlerAdapter和ChannelDuplexHandler这三个适配类,在使用的时候只需要实现你关注的方法即可

ChannelHandler生命周期方法

ChannelHandler里面定义三个生命周期方法,分别会在当前ChannelHander加入ChannelHandlerContext中,从ChannelHandlerContext中移除,以及ChannelHandler回调方法出现异常时被回调

通过ChanneHandler 实现客户端逻辑

chanaelAction()---在到服务器的连接已经建立之后被调用

channelRead0()--当从股务器接收到一条消息时被调用;

exceptionCaught()--在处理过程中引发异常时被调用

 

posted on 2020-09-05 17:19  shumeigang  阅读(145)  评论(0)    收藏  举报

导航