Netty学习08-netty消息在管道中流转分析

我在前面的文章中写到,给消息添加各种处理事件,但是这些处理事件是如何关联起来,做到都能够执行,而且会先执行上行的处理方法,然后处理下行的处理方法的。

本文基于netty-3.10.5.Final源码做一个简单的分析。

前面《netty学习04-编写一个简单NIO系统》我们已经分析过服务的启动过程,我们知道在服务启动后,AbstractNioWorker会调用AbstractNioSelector的run方法。

下面看下AbstractNioSelector的run方法,在run方法会有这么一句代码,就是对消息的处理方法。

process方法是个抽象方法,所以我们要看他在AbstractNioWorker的实现。其他细节性的东西先不管,在处理方法中,会有这么一句代码

应该就是处理消息的代码入口了,我们接着进去看看实现。因为他是抽象方法,所以我们要到实现类去看,NioDatagramWorker是UDP处理类,我们要看NioWorker的,里面有如下几行代码要注意。

接着分析fireMessageReceived的实现。

看sendUpstream的实现.

上面有一行代码是DefaultChannelHandlerContext head = getActualUpstreamContext(this.head);进入getActualUpstreamContext的实现类

通过这段代码可以看出,他会先循环遍历上行的处理handler,直到拿到一个,然后返回。然后继续根据原来的处理逻辑走,拿到第一个处理处理handler后,会调用sendUpstream(head, e);再看sendUpstream的源码。

然后我们继续看handleUpstream的实现,这个方法的实现有很多,我们就看下我们之前经常使用的SimpleChannelHandler类下对它的实现。

这个时候通常会调用我们重写的messageRecieved方法

然后如果继续调用sendUpstream,则到如下代码

然后再进去,便可看到

从而调用下一个handler的handleUpstream方法。

这样便能执行完所有上行的handler方法。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值