netty源码剖析,netty原理解析与开发实战pdf
门户:NioSocketChannel已向选择器注册。
让我们回到AbstractUnsafe的register0()方法3360。
Private register 0(通道promise promise){ try {//省略代码//做实际注册do register();neverRegistered=false注册=真;//触发事件pipeline . invokehandleraddifned();safeSetSuccess(承诺);//触发注册成功事件pipeline . firechannelregistered();if(is active()){ if(first registration){//传播主动事件(4)pipeline . firecannelactive();} else if (config()。isAutoRead()){ begin read();}}} catch (Throwable t) {//省略代码}}doRegister()会转到if (isActive())的判断因为此时链接已经完成,所以这里为真,默认的判断条件if (firstRegistration)也为真,所以会转到pipeline.firechannel()的步骤。
我们将在下一章详细分析管道。这里我们只需要知道它最终会流向AbstractUnsafe的beginRead()方法。
遵循beginRead()方法3360。
public final void begin read(){ assertEventLoop();如果(!is active()){ return;}试试{ doBeginRead();} catch(final exception){//代码省略}}这段代码我们也很熟悉,因为我们也通过分析NioServerSocketChannel分析过这一步。
让我们继续关注doBeginRead():
protected void dobeginread()throws exception {//Get选择键最终选择键选择键=this.selection键;如果(!selection key . is valid()){ return;} readPending=true//获取有趣的事件final int interest ops=selection key . interest ops();//确定是否不监听if((interestops readinterestop)==0 for any event {//此条件成立//注册上一个accept事件,readInterest表示可以读取一个新连接的含义,selection key . interestops(interestops readinterestop);}}相信你对这段代码会比较熟悉,因为我们注册了服务器通道之后就来到了这里。
因为read事件是我们创建NioSocketChannel时初始化的,而selectionKey是注册时通道返回的Key,selection key的步骤。interestops(interestops readinterestop)会在选择器中注册当前通道的read事件。
注册完成后,NioEventLoop可以轮询当前通道的读取事件。
以上是NioSocketChannel注册和监听事件的过程。
00-1010本章学习了客户端访问、NioSocketChannel的创建和注册以及相关操作,并涉及上一节中分析的eventLoop的逻辑。学生可以通过调试经历相关流程,加深印象。
以上是Netty分布式源分析监控和读取事件的详细内容。关于Netty分布式监控和读取事件的更多信息,请关注风行IT的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。