1.谜之开头
很早之前就想写一系列的Netty文章,已记录我的学习过程,让将要学习的童鞋可以借鉴,以便少走弯路。
开始~
Netty是一个框架,它是异步的事件驱动的网路框架。先这么理解。说白了就是个通信框架,之前我用用Java BIO、NIO开发,但是他们的缺点太过于致命。详细请看之前的博客BIO和NO相关
2.几个重要的概念
- Channel
- 回调
- Futrure
- 事件和
ChannelHandler
2.1.Channel
Channel类似于管道,它可以传入传出数据,因此可以打开或关闭。不在此赘述。详细看之前NIO系列文章。Channel文章
2.2.回调
回调就是一个方法,一个指向已经被提供给另一个方法的方法的应用。看不懂吧,其实开始我也看不懂。可以理解为:把你的接口对应的实现类的一个实例当成一个参数传递给一个函数调用,那个函数处理过程中会调用你的这个接口中的方法。
够通俗易懂吧~
2.3.Future
Future提供了一种在操作完成时通知应用程序的方式,它的对象可以看做是一个异步操作的结果占位符。在未来的某一个时刻完成,并提供对其结果的访问。JDK中自带Future。Netty也有自己的实现ChannelFuture
,在执行异步操作的时候使用。
每个NettyI/O操作都会返回一个ChannelFuture,它们不会阻塞,因此Netty是异步和时间驱动的。
一个小栗子
结合回调和Future的例子:
ChannelFutureListener
是一个监听器,可以注册到ChannelFuture上,它的回调方法是operatioComplete
//异步的连接到远程节点
ChannelFuture future = channel.connect(new InetSocketAddress("192.168.0.1",90));
//注册一个ChannelFutureListener
future.addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) {
if(future.isSuccess){}
}
})
回调和Future是相互补充的机制
2.4.事件和ChannelHandler
所有的事件都会被发给ChannelHandler
类中的某个用户实现的方法。
详细内容见由于下篇介绍
2.5.选择器、EventLoop
Netty通过Selector将触发事件从应用中抽象出来,为每一个Channel分配一个EventLoop,来处理事件。
EventLoop本身是一个线程驱动,它处理一个Channel的所有I/O事件。
下一篇:http://blog.csdn.net/theludlows/article/details/79449562