美文网首页
发布/订阅者模式

发布/订阅者模式

作者: 木兰参can | 来源:发表于2022-08-30 22:28 被阅读0次

    今天晚上加班到8:30,可是没有白天还有昨天有效率了。这几天真的很专注,一心在工作遇到的问题上。当很专注时,其实并不累,而且竟然把外部世界忘记了。完全忘记周围的一切,构思梳理思路的时候,尽量多想可能的情况,想如何把复杂的问题简单化。

    技术书买了好久几乎都从未翻过,今天坐在车上翻了一会儿,看了golang高级编程那本书写的发布/订阅者模式的代码,觉得真是妙啊。golang有了通道,真的很好。

    我想用自己理解的大概描述一下,今天看到的这个常见的发布/订阅者模式的代码。

    首先要构建New一个发布者对象,当然构建的时候会传参有,读写锁,订阅队列的缓存大小(有缓冲通道),发布超时时间(发布内容往订阅者通道放数据时,如果因为缓冲满了会阻塞,阻塞的超时时间,如果超时了,订阅者将接收不到这个发布内容)。

    订阅者是一个通道,因为订阅内容而成为订阅者,比如有的人订文学杂志,有的订报纸,要订什么,订阅者指定(过滤器),也可以指定可选的所有类型,比如来了一批待订的杂志,有的人不选,直接全订。订阅者,通道已经有了,有征订的人了。那么一有新的杂志发布,就会按照他们各自的需求送到各个订阅者那里。从通道那拿数据,接收到的就是想要的杂志。每个通道有容量,相当于信箱,信箱满了不能再放了,只有取信人从信箱中取出一部分或者全部,才能再往通道里面放。如果送信的人去了,等着有人先把信箱清理一部分,再放,等的超时了那个人还没清,可能不住在这里了,那就不送了扔掉(这个比喻可能不恰当)。

    订阅者信息是一个map,通道ch类型的数据可以作为key值,value是一个过滤器函数,可以订阅主题时,把过滤器作为参数传入,这样,就会创建通道,并把此过滤器作为这个通道对应的value,订阅主题的函数,返回的是一个通道,发布者将会往这些通道放数据,前提是,要被这个通道对应的过滤器检查后,再判断是否放数据到这个通道。

    订阅函数除了可以订阅自己指定了过滤器的通道,大概意思就是这条是机动车道只允许有某些条件的人通过,比如有工作证的条件,这条件就是过滤器。但有些道,谁都可以过。那么就需要一个订阅函数,返回一个不指定任何过滤器的通道。这个通道对应的谁发布东西,我都收,来者不拒。订阅的主题(过滤器)也可想成如公众号的关注,视频号的关注等。

    退出订阅是,把通道传入退订函数,告诉他我不订了,那么再有发布的时候,这个通道已经不再去接收了。

    此外我又翻了一些,有关协程和通道的使用,为什么我平时不翻翻呢,真的对技术能力的提升很有帮助。

相关文章

  • 设计模式之发布订阅模式(1) 一文搞懂发布订阅模式

    目录 发布/订阅者模式的优点 实现发布/订阅者模式需要考虑的点 何时应使用发布/订阅者模式 发布/订阅者模式与观察...

  • 发布订阅模式(观察者模式)

    发布订阅模式(观察者模式) 发布订阅也叫观察者模式 发布 && 订阅 使用

  • JS-简单实现发布订阅模式

    发布订阅模式主要涉及三个对象:发布者、订阅者、主题对象。 发布-订阅模式 定义  发布-订阅模式又称观察者模式,它...

  • Redis发布订阅

    发布订阅 Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布 者和订阅者不进行直接通信,发布者...

  • 观察者模式、promise基础

    1.观察者模式 发布订阅 promise redux eventBus 观察者模式(基于发布订阅的) 发布 ...

  • 观察者模式

    精髓: 观察者模式其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。 ...

  • Vue响应式原理——初体验

    发布-订阅模式(观察者模式) 首先,不要被发布-订阅者模式这个鬼名字给整蒙了,由于最开始我没整明白,发布者、订阅者...

  • 观察者模式&&订阅发布模式

    观察者模式&&订阅发布模式 参考:知乎-观察者模式 vs 发布订阅模式[https://zhuanlan.zhih...

  • 发布订阅和观察者模式的区别

    有些人认为观察者模式就是发布订阅模式,实际上观察者模式是包含了订阅发布模式,发布订阅模式只是观察者模式中的一种。观...

  • redis 学习(12)-- redis 发布订阅

    redis 发布订阅 发布订阅模式中的角色 发布者(publisher) 订阅者(subscriber) 频道(c...

网友评论

      本文标题:发布/订阅者模式

      本文链接:https://www.haomeiwen.com/subject/vlyrnrtx.html