#订阅和发布有什么用呢?
# 特点
# 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("啊哈哈哈哈啊哈哈")