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) 收藏 举报
浙公网安备 33010602011771号