信号与发布-订阅有什么不同?
2 个回答
6
这段内容可以帮助你理解Pubsub是如何与信号相关的:http://pubsub.sourceforge.net/apidocs/concepts.html
Pubsub的作用是让应用程序中的不同部分(比如可调用的函数、模块、包)之间可以更独立地工作。它是通过以下方式实现的:
- 让应用程序的某些部分可以发送消息给“应用程序的其他部分”,而不需要知道:
- 消息是否会被处理:
- 可能这个消息会被完全忽略,
- 或者会被应用程序的多个部分处理;
- 消息会如何被处理:
- 消息及其内容会被做什么;
- 任何给定的消息会以什么顺序发送给应用程序的其他部分;
- 让应用程序的某些部分可以接收和处理来自“应用程序其他部分”的消息,而不需要知道是谁发送的消息。
监听器是“想要接收消息的应用程序部分”。监听器会订阅一个或多个主题。发送者是任何请求Pubsub发送特定主题消息的应用程序部分。发送者会提供数据(如果有的话)。Pubsub会把消息和任何数据发送给所有订阅了该主题的监听器。
16
关于 Blinker
和 PubSub
,它们其实是同一种东西。主要的区别在于它们的使用方式:
使用 Blinker
时,当你想要订阅一个信号的时候,你需要告诉它这个信号的名字;而当你想要激活这个信号时,你需要传入一个激活的对象。
而使用 PubSub
时,当你订阅一个监听器时,你同样需要提供名字(和 Blinker
一样),但是当你想要通知这个监听器时,你直接把数据作为关键字参数传递过去。因为这种关键字参数的方式,可以让 PubSub
有更多的安全检查。
就个人而言,我更倾向于使用 Blinker
,因为它更符合我的思维方式,但 PubSub
也有它的用处。