摘要:中的發(fā)布訂閱模型是一種消息通信模式,今天聊一下在中實(shí)現(xiàn)簡(jiǎn)單的發(fā)布訂閱功能。參考自鏈接描述以上就是發(fā)布訂閱的簡(jiǎn)單實(shí)現(xiàn),如有錯(cuò)誤,歡迎交流指正
redis中的發(fā)布/訂閱模型是一種消息通信模式,今天聊一下在python中實(shí)現(xiàn)簡(jiǎn)單的發(fā)布訂閱功能。
實(shí)現(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ā)布訂閱對(duì)象,通過這個(gè)對(duì)象你能1)訂閱頻道 2)監(jiān)聽頻道中的消息 pub = self.__conn.pubsub() # 訂閱頻道,與publish()中指定的頻道一樣。消息會(huì)發(fā)布到這個(gè)頻道中 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)
實(shí)現(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ā)布訂閱對(duì)象,通過這個(gè)對(duì)象你能1)訂閱頻道 2)監(jiān)聽頻道中的消息 pub = self.__conn.pubsub() # 訂閱某個(gè)頻道,與publish()中指定的頻道一樣。消息會(huì)發(fā)布到這個(gè)頻道中 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ā)布訂閱對(duì)象的parse_response()方法獲取訂閱信息,方式二使用發(fā)布訂閱對(duì)象的listen()方法獲取訂閱信息。listen()方法是對(duì)parse_response()方法的封裝,加入了阻塞,并將parse_response()返回的結(jié)果進(jìn)行了處理,使結(jié)果更加簡(jiǎn)單。
參考自 鏈接描述
以上就是發(fā)布/訂閱的簡(jiǎn)單實(shí)現(xiàn),如有錯(cuò)誤,歡迎交流指正!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44917.html
摘要:上一篇文章實(shí)戰(zhàn)第三章命令第五節(jié)有序集合下一篇文章實(shí)戰(zhàn)第三章命令第七節(jié)其他命令一般來說,發(fā)布與訂閱又稱的特點(diǎn)是訂閱者負(fù)責(zé)訂閱頻道,發(fā)送者負(fù)責(zé)向頻道發(fā)送二進(jìn)制字符串消息。到目前為止,本書介紹的大多數(shù)命令都是與特定數(shù)據(jù)類型相關(guān)的。 上一篇文章:Python--Redis實(shí)戰(zhàn):第三章:Redis命令:第五節(jié):有序集合下一篇文章:Python--Redis實(shí)戰(zhàn):第三章:Redis命令:第七節(jié):其...
摘要:它采用了請(qǐng)求響應(yīng)模型。通信請(qǐng)求只能由客戶端發(fā)起,服務(wù)端對(duì)請(qǐng)求做出應(yīng)答處理弊端協(xié)議無法實(shí)現(xiàn)服務(wù)器主動(dòng)向客戶端發(fā)起消息。如何使用客戶端創(chuàng)建對(duì)象屬性表示連接狀態(tài)可選值表示連接尚未建立。表示連接正在進(jìn)行關(guān)閉。 一言不合就上效果圖演示showImg(https://segmentfault.com/img/bVbkUDl?w=1920&h=638); 項(xiàng)目:http://112.74.164.1...
閱讀 3123·2021-09-24 10:26
閱讀 3318·2021-09-23 11:54
閱讀 4737·2021-09-22 15:33
閱讀 2267·2021-09-09 09:33
閱讀 1692·2021-09-07 10:10
閱讀 980·2019-08-30 11:09
閱讀 2871·2019-08-29 17:13
閱讀 1029·2019-08-29 12:35