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

  

posted on 2017-09-09 16:44  bainianminguo  阅读(252)  评论(0编辑  收藏  举报