目录
发布与订阅
通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者,每当有其它客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息
除订阅频道外,客户端还可以通过执行PUBSCRIBE命令订阅一个或多个模式,从而成为这些模式的订阅者,每当有其它客户端向某个频道发送消息时,消息不仅会被发送给这个频道的所有订阅者,还会被发送给所有与这个频道相匹配的模式的订阅者
频道的订阅与退订
订阅频道
执行SUBCRIBE命令订阅频道
- 如果频道已经有订阅者,则将客户端添加到订阅者链表末尾
- 如果频道没有,则在字典中为频道创建一个键,并将这个键的值设置为空链表,再将客户端添加到链表
退订频道
执行UNSUBCRIBE命令订阅频道
- 根据被退订频道的名字,在字典中找到频道对应的订阅者链表,然后删除链表中该客户端的信息
- 如果删除退订客户端后链表为空链表,则删除字典中频道对应的键
模式的订阅与退订
订阅模式
执行PSUBSCRIBR命令订阅模式
- 新建一个pubsubPattern结构,将结构的pattern属性设置为被订阅的模式,client属性设置为订阅模式的客户端
- 将pubsubPattern结构添加到pubsub_patterns链表的表尾
退订模式
执行PUNSUBSCRIBR命令退订模式
当一个客户端退订某个或某些模式的时候,服务器将在pubsub_patterns链表中查找并删除那些pattern属性为被退订模式,并且client属性为执行退订命令的客户端的pubsubPattern结构
发送消息
将消息发送给频道订阅者
PUBLISH命令将在pubsub_channels字典里找到频道channel的订阅者名单(一个链表),然后将消息发送给名单上的所有客户端
将消息发送给模式订阅者
PUBLISH命令要做的就是遍历整个pubsub_patterns链表,查找那些与channel频道相匹配的模式,并将消息发送给订阅了这些模式的客户端
版权声明:本文为weixin_45912201原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。