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