Redis订阅发布消息实例

本文介绍了一个基于Python实现的Redis订阅与发布系统示例。通过发布端(pub.py)和订阅端(sub.py)两个脚本,演示了如何利用Redis进行消息传递。发布端负责发送预定义的消息类型,而订阅端则监听这些消息并执行相应的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis订阅和发布消息

首先,发布端启动 redis-server.exe 服务
发布端 pub.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2015-9-9
@author: sxli
'''
import redis
import sys
class  PublishChannel(object):
    #kword = u"桌面".encode('gb2312')
    def send_pybot(self,msg):
        message=["msg1","msg2","msg3"]
        '''
        msg1:对参与者端共享app进行外窗口操作
        msg2:对参与者端共享app进行内窗口操作
        msg3:参与者端托盘断开连接重连操作

        '''
        pool=redis.ConnectionPool(host='192.168.3.58',port=6379,db=0)
        r = redis.StrictRedis(connection_pool=pool)
        # input = raw_input("publish:")
        if msg in message:
            r.publish('spub', msg)
        if  input == 'over':
            print '停止发布'
            # break; 
if __name__ == "__main__":
    Do = PublishChannel()
    Do.send_pybot(sys.argv[1])
    print "finish msg to Channel !"

订阅端 sub.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
Created on 2017-12-18
@author: sxli

'''
import redis
import win32api
import os
pool=redis.ConnectionPool(host='192.168.3.58',port=6379,db=0)
#db=0,选择操作0号数据库  redis默认有16个数据库  conf可以配置
r = redis.StrictRedis(connection_pool=pool)
p = r.pubsub()
p.subscribe('spub')
message=["msg1","msg2","msg3"]
for item in p.listen():    
    print item
    if item['type'] == 'message': 
        data = item['data']
        # print data
        if data == message[0]:
            print u"对参与者端共享app进行外窗口操作"           
            os.system("C:\JHAppTestAutomation\JHCoDesign-5.0\JHApp-4.0.0\bat\GotoTestCase1.bat")
            print u"msg1执行完成"
        elif data == message[1]:
            print u"对参与者端的共享app进行内窗口操作"
            #os.system("C:\\JHAppTestAutomation\\JHCoDesign-5.0\\bat\\GotoTestCase2.bat %s " % (x))
        elif data == message[2]:
            print u"对参与者端的共享app进行内窗口操作"
            #os.system("C:\\JHAppTestAutomation\\JHCoDesign-5.0\\bat\\GotoTestCase2.bat %s " % (x))
        elif data == message[3]:
            print u"注销用户!"
            #os.system("C:\\JHAppTestAutomation\\JHCoDesign-5.0\\bat\\GotoTestCase2.bat %s " % (x))
        if  item['data']=='over':
            break; 
p.unsubscribe('spub')
print '取消订阅'

可通过redis-cli.exe进行测试;
cmd 打开redis-cli.exe


查看使用方法:
“redis-cli.exe” –help


连接至redis服务端:
“redis-cli.exe” -h localhost -p (默认6379)


订阅一个频道:
192.168.3.58:6379> subscribe spub
Reading messages… (press Ctrl-C to quit)
1) “subscribe”
2) “spub”
3) (integer) 1


发布一个消息:
192.168.3.58:6379> publish spub “hello!”
(integer) 1


最后跑通后测试:
订阅端:python sub.py
{‘pattern’: None, ‘type’: ‘subscribe’, ‘channel’: ‘spub’, ‘data’: 1L}

发布端 执行脚本:python pub.py msg1

订阅端:python sub.py
{‘pattern’: None, ‘type’: ‘subscribe’, ‘channel’: ‘spub’, ‘data’: 1L}
对参与者端共享app进行外窗口操作
msg1执行完成

相关连接:
https://blog.youkuaiyun.com/kwsy2008/article/details/48372079
https://blog.youkuaiyun.com/dgatiger/article/details/50436014
http://redisbook.readthedocs.io/en/latest/feature/pubsub.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值