摘要:中的發(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
摘要:上一篇文章實戰(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é):其...
摘要:它采用了請求響應(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...
閱讀 3081·2021-09-24 10:26
閱讀 3236·2021-09-23 11:54
閱讀 4645·2021-09-22 15:33
閱讀 2243·2021-09-09 09:33
閱讀 1642·2021-09-07 10:10
閱讀 950·2019-08-30 11:09
閱讀 2840·2019-08-29 17:13
閱讀 993·2019-08-29 12:35