https://mp.weixin.qq.com/s/6XX0CZHoDotIgLbNDSIUog

 
简单介绍Filter的实现。
 
 
1. 基本介绍
 
使用过滤器过滤掉client和manager的一部分能力。
 
2. ManagerFilter/ClientFilter
 
用于对manager和client进行过滤:
a. 若过滤掉则返回None;
b. 若没过滤掉,也可能进行更改;
 
3. mIdentity/cIdentity
 
不产生任何变化的过滤器:
 
4. diplomacy node
 
1) TLAdapterNode
 
是一个适配器节点。
 
2) clientFn
 
把本节点看到的client参数,映射为下游节点看到的client参数:
a. 把client都经过过滤器处理一遍;
b. 确保过滤器过滤掉一部分能力:
这里IDEA提示把out.map换为out.foreach比较好。
 
看最后一个:require(!c.requestFifo || o.requestFifo)
从中可以看出:不需要fifo比需要fifo能力强。不需要fifo说明client具备请求序列化的能力,需要fifo则client自身不具备,需要manager使用fifo来为之实现。
a. 若c.requestFifo=false,表明c不需要fifo,那么无论o需不需要fifo都不超过c的能力;
b. 若c.requestFifo=true, 则o.requestFifo=true,即如果c不具备序列化的能力,那么o也不能具备;
 
3) managerFn
 
把本节点看到的manager参数,映射为上游节点看到的manager参数:
a. 把manager都经过过滤器处理一遍;
b. 确保过滤器过滤掉一部分能力:
 
也看最后一个:require(o.fifoId.isEmpty || m.fifoId == o.fifoId)
从中可以看出:具有fifoId的能力要强于没有fifoId。原因在于,有fifoId则内部实现了针对该fifoId的序列化功能。
 
5. lazy module
 
用于实现内部逻辑。
 
 
1) 成对出现的输入边和输出边
 
 
2) 输入边和输出边直连即可
 
由此可以看出Filter的功能,主要通过diplomacy node实现。
 
3) 若不支持Acquire操作,则默认关闭channel b/c/e:
 
 
6. object TLFilter
 
其中定义了一些过滤器实例。
 
1) mIdentity/cIdentity
 
不做改变:
 
2) mSelectIntersect
 
这是一个manager过滤器:
把manager中的地址集合与参数select求交集,并调整transfer的能力。
 
3) mHideContained
 
 
重构一下:
只保留没有被container完全包含的地址集合。
 
4) mHideCacheable
 
去除支持Cache的manager:
 
5) mSelectCacheable
 
去除不支持Cache的manager:
 
6) mMaskCacheable
 
去除支持cache的manager的cache能力:
 
7) mSelectAndMaskCacheable
 
a. 去除支持cache的manager的cache能力;
b. 去除不支持cache的manager;
 
8) cHideCaching
 
去除支持cache的client:
 
9) cSelectCaching
 
选择支持cache的client:
 
 
 
 

最新文章

  1. JavaScript的前世今生
  2. MySQL半同步复制
  3. hosts持续更新
  4. mybatis 与 日志
  5. 1.ARM的基础知识
  6. M站开发规范——By Klax
  7. jQuery诞生记-原理与机制
  8. Configure SSL for SharePoint 2013
  9. mac svn
  10. IL-rewriting profiler
  11. linux下的tomcat自动退出的问题
  12. Hibernate 使用HQL的 in 时要注意判断in的值(list)是否包含数据
  13. modern web application
  14. [Boost基础]并发编程——asio网络库——异步socket处理
  15. MVC中的其他新特性
  16. informix数据迁移工具使用介绍
  17. 酷派8702手机打开logcat
  18. Abp后台工作者类使用hangfire
  19. web前端学习(2):开始编写HTML
  20. AI移动自动化测试框架设计(解读)

热门文章

  1. 常用linux命令学习记录
  2. DHCP报文(1)
  3. Golang 实现 Redis(5): 使用跳表实现 SortedSet
  4. 深入理解CSS定位
  5. 测试开发专题:spring-boot自定义异常返回
  6. java-mysql类型对照
  7. [NBUT 1458 Teemo]区间第k大问题,划分树
  8. ql的python学习之路-day6
  9. Java并发编程实战 05等待-通知机制和活跃性问题
  10. Kappa(cappa)系数只需要看这一篇就够了,算法到python实现