#订阅和发布有什么用呢?
# 特点
# 1、实现一个一对多的效果,只有一个发布者,多个订阅者
# 2、实时的发布消息,广播方发布消息,所有的订阅者都会受到消息,一个人同时只能接受
#一个频道
1、先写一个公共的类,这个类发布方和订阅方都可以调用,我们在这个类中分别定义了发布方的方法和订阅方的方法
import redis class RedisHelper(object): def __init__(self): self.conn = redis.Redis(host="127.0.0.1") #首先连上redis self.chan_sub = "fm100.4" #订阅频道 self.chan_pub = "fm100.4" #发布频道 def public(self,msg): self.conn.publish(self.chan_pub,msg) # 发布消息,往self.chan_pub这个频道发布消息,消息的内容是msg return True def subscribe(self): pub = self.conn.pubsub() #生成一个实例,相当于打开收音机 pub.subscribe(self.chan_sub) #订阅self.chan_sub这个频道的内容 pub.parse_response() #准备监听发布方发布的消息,这里仅仅是准备监听,只有当真正的实例去调用这个parse_response方法,才会真正的开始监听消息 return pub
2、在订阅方中导入我们公共的类,然后实例化一个订阅方的对象
from test_redis_class import RedisHelper obj = RedisHelper() #先实例化,连接发布方 redis_sub = obj.subscribe() while True: msg = redis_sub.parse_response() #这里开始真正的听,如果发布方有消息过来,则打印消息,如果 #广播方没有消息过来,则一直阻塞 print(msg)
3、在发布方中导入我们公共的类,然后实例化一个发布方的对象
from test_redis_class import RedisHelper """ 方法1 import redis r = redis.Redis() #发布消息下面这个命令的返回值就是有多少订阅方收到广播的消息 r.publish("fm100.4","hahahahah") """ # 方法2 #发布消息 obj = RedisHelper() obj.public("啊哈哈哈哈啊哈哈")