Dubbo源码阅读之 服务端和客户端处理链
2017-06-28 19:35
381 查看
【 DubboProtocolTest.java ====>> 服务器 ===>> 处理器职责链】
1. 职责链:NettyHandler --> NettyServer --> MultiMessageHandler --> HeartbeatHandler
--> AllChannelHandler --> DecoderHandler --> HeaderExChangeHandler
--> requestHandler=new ExchangeHandlerAdapter
2. 处理器:NettyHandler
======>>> 维护客户端与服务端建立连接的 channel,通过ConcurrentMap来做到的。
3. 处理器:NettyServer
======>>> 啥事都没有做,直接传递给下一个消息处理器。
4. 处理器:MultiMessageHandler
======>>> 在接受消息的方法中,判断了当前消息是否是 MultiMessage 也就是 message instanceof MultiMessage。
5. 处理器:HeartbeatHandler
======>>> 更新当前处理器的读写的时间戳。
======>>> 在接受消息的方法中,判断当前消息是否是心跳消息,如果是心跳请求,就查看当前消息是否要响应,如果需要响应就发送一个心跳响应。
6. 处理器:AllChannelHandler
======>>> 启动一个Task,提交到一个无界的线程池。
7. 处理器:DecoderHandler
======>>> 判断该消息是否实现了接口Decodeable,如果实现了就调用方法 decode()。
8. 处理器:HeaderExChangeHandler
======>>> receive方法中会调用发送方法,给客户端返回结果值。
9. 处理器:requestHandler
======>>> 接收消息,判断消息是否是 Invocation。
======>>> 根据Key获取的Invoker,就是目标实例/方法。
======>>> 调用目标方法。
【 DubboProtocolTest.java ====>> 客户端器 ===>> 处理器职责链】
1. 职责链:NettyHandler --> NettyClient --> MultiMessageHandler --> HeartbeatHandler
--> AllChannelHandler --> DecoderHandler --> HeaderExChangeHandler
--> requestHandler=new ExchangeHandlerAdapter
2. 处理器:NettyHandler
======>>> 维护客户端与服务端建立连接的 channel,通过ConcurrentMap来做到的。
3. 处理器:NettyServer
======>>> 啥事都没有做,直接传递给下一个消息处理器。
4. 处理器:MultiMessageHandler
======>>> 在接受消息的方法中,判断了当前消息是否是 MultiMessage 也就是 message instanceof MultiMessage。
5. 处理器:HeartbeatHandler
======>>> 更新当前处理器的读写的时间戳。
======>>> 在接受消息的方法中,判断当前消息是否是心跳消息,如果是心跳请求,就查看当前消息是否要响应,如果需要响应就发送一个心跳响应。
6. 处理器:AllChannelHandler
======>>> 启动一个Task,提交到一个无界的线程池。
7. 处理器:DecoderHandler
======>>> 判断该消息是否实现了接口Decodeable,如果实现了就调用方法 decode()。
8. 处理器:HeaderExChangeHandler
======>>> receive方法中会调用发送方法,给服务器发送响应
9. 处理器:requestHandler
======>>> 接收消息,判断消息是否是 Invocation。
======>>> 根据Key获取的Invoker,就是目标实例/方法。
======>>> 调用目标方法。
1. 职责链:NettyHandler --> NettyServer --> MultiMessageHandler --> HeartbeatHandler
--> AllChannelHandler --> DecoderHandler --> HeaderExChangeHandler
--> requestHandler=new ExchangeHandlerAdapter
2. 处理器:NettyHandler
======>>> 维护客户端与服务端建立连接的 channel,通过ConcurrentMap来做到的。
3. 处理器:NettyServer
======>>> 啥事都没有做,直接传递给下一个消息处理器。
4. 处理器:MultiMessageHandler
======>>> 在接受消息的方法中,判断了当前消息是否是 MultiMessage 也就是 message instanceof MultiMessage。
5. 处理器:HeartbeatHandler
======>>> 更新当前处理器的读写的时间戳。
======>>> 在接受消息的方法中,判断当前消息是否是心跳消息,如果是心跳请求,就查看当前消息是否要响应,如果需要响应就发送一个心跳响应。
6. 处理器:AllChannelHandler
======>>> 启动一个Task,提交到一个无界的线程池。
7. 处理器:DecoderHandler
======>>> 判断该消息是否实现了接口Decodeable,如果实现了就调用方法 decode()。
8. 处理器:HeaderExChangeHandler
======>>> receive方法中会调用发送方法,给客户端返回结果值。
9. 处理器:requestHandler
======>>> 接收消息,判断消息是否是 Invocation。
======>>> 根据Key获取的Invoker,就是目标实例/方法。
======>>> 调用目标方法。
【 DubboProtocolTest.java ====>> 客户端器 ===>> 处理器职责链】
1. 职责链:NettyHandler --> NettyClient --> MultiMessageHandler --> HeartbeatHandler
--> AllChannelHandler --> DecoderHandler --> HeaderExChangeHandler
--> requestHandler=new ExchangeHandlerAdapter
2. 处理器:NettyHandler
======>>> 维护客户端与服务端建立连接的 channel,通过ConcurrentMap来做到的。
3. 处理器:NettyServer
======>>> 啥事都没有做,直接传递给下一个消息处理器。
4. 处理器:MultiMessageHandler
======>>> 在接受消息的方法中,判断了当前消息是否是 MultiMessage 也就是 message instanceof MultiMessage。
5. 处理器:HeartbeatHandler
======>>> 更新当前处理器的读写的时间戳。
======>>> 在接受消息的方法中,判断当前消息是否是心跳消息,如果是心跳请求,就查看当前消息是否要响应,如果需要响应就发送一个心跳响应。
6. 处理器:AllChannelHandler
======>>> 启动一个Task,提交到一个无界的线程池。
7. 处理器:DecoderHandler
======>>> 判断该消息是否实现了接口Decodeable,如果实现了就调用方法 decode()。
8. 处理器:HeaderExChangeHandler
======>>> receive方法中会调用发送方法,给服务器发送响应
9. 处理器:requestHandler
======>>> 接收消息,判断消息是否是 Invocation。
======>>> 根据Key获取的Invoker,就是目标实例/方法。
======>>> 调用目标方法。
相关文章推荐
- zookeeper源码阅读分析笔记--客户端服务端通信机制以及session超时、过期处理
- redis源码阅读(6)-timeEvent之异步处理客户端
- dubbo源码分析-客户端DubboInvoker调用服务端体会Netty的非阻塞IO使用
- 服务端数据校验及客户端js脚本验证集成处理初探(附源码)
- Gaea源码阅读(二):客户端流程
- 出售:IM视频会议办公平台客户端服务端纯商业性质运营源码
- 传奇源码分析-客户端(游戏逻辑处理源分析四)
- 传奇源码分析-客户端(游戏逻辑处理源分析五 服务器端响应)
- 传奇源码分析-客户端(游戏逻辑处理源分析五 服务器端响应)
- 用.Net打造一个移动客户端(Android/IOS)的服务端框架NHM(五)——Android端消息处理机制
- WCF RIA Services 客户端、服务端的处理方法和例子
- 基于mfc的pc客户端源码阅读笔记
- Silverlight时时彩源码【包括全套客户端、服务端、管理端】
- 传奇源码分析-客户端(游戏逻辑处理源分析五 服务器端响应)
- Linux/Unix服务端和客户端Socket编程入门实例(含源码下载)
- node.js版简单客户端和服务端通讯源码
- MySQL源码中处理客户端不同地址族的源码
- 传奇源码分析-客户端(游戏逻辑处理源分析四)
- 传奇源码分析-客户端(游戏逻辑处理源分析三)
- 服务端与客户端验证一体化方案(附项目源码)