
经常看到高并发云云,然后大多会提到netty,现在就研究一下netty源码。
可以看到netty应该很复杂,有很多包。这里选择看看第一个netty-all。
这里的bootstrap包应该就是启动包。
先看看这几个类,一共有7个类AbstractBootstrap,Bootstrap,ServerBootstrap,及对应的config,再加一个FailedChannel。
看注释,AbstractBootstrap是一个使启动Channel更容易地帮助类,它提供了提供了方法链来更容易地配置自己。由此可知,核心在于启动Channel。
再看看Bootstrap类,这里没有使用泛型,并且出现了Channel。
而 ServerBootstrap里则出现了ServerChannel。
那么现在就有点头绪了。这几个Bootstrap-like地类是用来启动对应地Channel-like的类,主要是Channel和ServerChannel。而FailedChannel这里猜测是启动失败了。
没啥说的,直接看Channel类。
看注释就知道这个类不一般。先读一下,开头第二个单词就不认识,nexus是什么意思?查一下百度翻译:关系、联系。
那么,Channel是连接到网络套接字或者其他IO组件的。它提供了当前Channel的状态 如是否打开等,提供了Channel的配置参数如接收数据的大小,提供了IO *** 作如读写,提供了Channel管道持有当前Channel的所有事件。
然后有一行超大字体:所有的IO *** 作都是异步的。
在netty中所有的io *** 作都是异步的,这意味着,任何io调用将会立即返回结果,但不会保证此时已执行完io *** 作。ChannelFuture则会作为执行结果返回,它会在执行成功、失败、取消时通知你。
接下来又是一行超大字体:Channel是有阶级的。
根据Channel的创建方式它可以是有父亲。例如,一个SocketChannel可以通过parent()方法获得ServerSocketChannel。这里的阶级意思是Channel是属于谁的。
。。。跳过中间晦涩但琐碎的部分,直接看最后
在完成Channel 的 *** 作之后一定要调用close方法!!
总之,Channel就是一个连接通道,并且是异步的,这是整个netty的核心。
接下来就去看看Channel是怎么创建的。Channel有很多种,有庞大的继承体系,所以这里先选一个较常用的Channel,ServerSocketChannel从特殊到一般,徐图征进。
//TODO
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)