国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python開發(fā)-實現(xiàn)redis中的發(fā)布訂閱功能

chengjianhua / 746人閱讀

摘要:中的發(fā)布訂閱模型是一種消息通信模式,今天聊一下在中實現(xiàn)簡單的發(fā)布訂閱功能。參考自鏈接描述以上就是發(fā)布訂閱的簡單實現(xiàn),如有錯誤,歡迎交流指正

redis中的發(fā)布/訂閱模型是一種消息通信模式,今天聊一下在python中實現(xiàn)簡單的發(fā)布訂閱功能。

實現(xiàn)方式一:
redis_helper.py: 封裝發(fā)布訂閱方法

import redis
                
                
class RedisHelper(object):
    
    def __init__(self):
        self.__conn = redis.Redis(host="localhost")
        # 訂閱頻道
        self.chan_sub = "fm104.5"
        
    def public(self, msg):
        """
        在指定頻道上發(fā)布消息
        :param msg:
        :return:
        """
        # publish(): 在指定頻道上發(fā)布消息,返回訂閱者的數(shù)量
        self.__conn.publish(self.chan_sub, msg)
        return True

    def subscribe(self):
        # 返回發(fā)布訂閱對象,通過這個對象你能1)訂閱頻道 2)監(jiān)聽頻道中的消息
        pub = self.__conn.pubsub()
        # 訂閱頻道,與publish()中指定的頻道一樣。消息會發(fā)布到這個頻道中
        pub.subscribe(self.chan_sub)
        ret = pub.parse_response()  # [b"subscribe", b"fm86", 1]
        print("ret:%s" % ret)
        return pub

redis_pub.py: 發(fā)布者

from redis_helper import RedisHelper
                
                
obj = RedisHelper()
for i in range(5):
    obj.public("hello_%s" % i)

redis_sub.py: 訂閱者

from redis_helper import RedisHelper
                
                
obj = RedisHelper()
redis_sub = obj.subscribe()
while True:
    msg = redis_sub.parse_response()
    print(msg)

實現(xiàn)方式二:
redis_helper.py: 封裝發(fā)布訂閱方法

import redis
                
                
class RedisHelper(object):
    
    def __init__(self):
        self.__conn = redis.Redis(host="localhost")
        # 頻道名稱
        self.chan_sub = "orders"
        
    def public(self, msg):
        """
        在指定頻道上發(fā)布消息
        :param msg:
        :return:
        """
        # publish(): 在指定頻道上發(fā)布消息,返回訂閱者的數(shù)量
        self.__conn.publish(self.chan_sub, msg)
        return True

    def subscribe(self):
        # 返回發(fā)布訂閱對象,通過這個對象你能1)訂閱頻道 2)監(jiān)聽頻道中的消息
        pub = self.__conn.pubsub()
        # 訂閱某個頻道,與publish()中指定的頻道一樣。消息會發(fā)布到這個頻道中
        pub.subscribe(self.chan_sub)
        return pub

redis_pub.py:

from redis_helper import RedisHelper


obj = RedisHelper()
for i in range(5):
    obj.public("hello_%s" % i)

redis_sub.py:

from redis_helper import RedisHelper

obj = RedisHelper()
redis_sub = obj.subscribe()
while True:
    # listen()函數(shù)封裝了parse_response()函數(shù)
    msg = redis_sub.listen()
    for i in msg:
        if i["type"] == "message":
            print(str(i["channel"], encoding="utf-8") + ":" + str(i["data"], encoding="utf-8"))
        elif i["type"] == "subscrube":
            print(str(i["chennel"], encoding="utf-8"))

以上兩種方式的不同之處在于,方式一使用發(fā)布訂閱對象的parse_response()方法獲取訂閱信息,方式二使用發(fā)布訂閱對象的listen()方法獲取訂閱信息。listen()方法是對parse_response()方法的封裝,加入了阻塞,并將parse_response()返回的結(jié)果進行了處理,使結(jié)果更加簡單。

參考自 鏈接描述

以上就是發(fā)布/訂閱的簡單實現(xiàn),如有錯誤,歡迎交流指正!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44917.html

相關(guān)文章

  • Python--Redis實戰(zhàn):第三章:Redis命令:第六節(jié):發(fā)布訂閱

    摘要:上一篇文章實戰(zhàn)第三章命令第五節(jié)有序集合下一篇文章實戰(zhàn)第三章命令第七節(jié)其他命令一般來說,發(fā)布與訂閱又稱的特點是訂閱者負責(zé)訂閱頻道,發(fā)送者負責(zé)向頻道發(fā)送二進制字符串消息。到目前為止,本書介紹的大多數(shù)命令都是與特定數(shù)據(jù)類型相關(guān)的。 上一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第五節(jié):有序集合下一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第七節(jié):其...

    DC_er 評論0 收藏0
  • Django WebSocket Redis 在線聊天室

    摘要:它采用了請求響應(yīng)模型。通信請求只能由客戶端發(fā)起,服務(wù)端對請求做出應(yīng)答處理弊端協(xié)議無法實現(xiàn)服務(wù)器主動向客戶端發(fā)起消息。如何使用客戶端創(chuàng)建對象屬性表示連接狀態(tài)可選值表示連接尚未建立。表示連接正在進行關(guān)閉。 一言不合就上效果圖演示showImg(https://segmentfault.com/img/bVbkUDl?w=1920&h=638); 項目:http://112.74.164.1...

    ranwu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<