netty--模式入门
这篇算是总结,也算是大白话netty入门。
Bootstrap这个类 可以绑定ip和端口,可以配置bosseventloopgroup nioserverchannel(也就是用eventloop中的select 监听 客户端连接的 accept事件 )
可以配置niochannel(也就是当连接建立之后,用worereventloopgroup 中的某个eventloop 中的select去监听某个channel中的读写等事件
eventloop 这个类最终会是一个EventExecutor 一个eventExecutor 有一个线程,一个taskqueue ,一个executor执行器。 这个异步队列是核心。
eventloop 许多个就是 nioEventloopgroup。那就是多个执行器和相关线程,当然还有多个taskqueue。
这就和nio对应起来了
多个客户端的channel 可以注册到一个eventloop 会共享一个 taskqueue。也就是说这些channel里的任何事件都组织成一个task异步任务放到队列里去
然后可以注册到一个eventloop里的执行器会起线程不断的读取异步任务并执行。
一个eventloop 是这样的那eventloopgroup呢?也就是说会有更多的客户端。
netty几乎所有的操作都是异步的,意味着都要放到taskqueue里。
再说说channel channel应该有基本的网络ip和端口号等信息。 其中还有一个双向链表的流水线。这个双向链表node不是handler 而是handlercontext
这个上下文包含了 当前channel的引用,注册到上下文的handler对象等。
也就是说 大多数channel的流水线中上下文的链表中注册的handler都是共享的。 ChannelInitializer是初始化流水线和handler的主要方式。
还要做个head ctx node 和tail ctx node 一些缺省的操作在这个两个头尾里。
例如一个读的事件来了,那么处理读信息的handler会异步的执行相关的处理代码。当然要在这个channel所注册到的eventloop里。也就是要放在对应的
taskqueue里。当然in 和out 事件在这个双向链表里查找顺序是反的。。可以参看其他资料。
大概是这样的。。当然你如果一点都不懂。。看了也白看。
当然如果你都懂,那看了也白看。