在c/s架构中,可以充分地利用redis订阅服务,实现服务器端和客户端的信息收发,下面说说在python中如何使用redistribute的订阅服务。
这里要举的例子是,server端进行服务的订阅,而client端进行消息的广播发送。
1.方法一:server端使用redis操作+client端使用python交互器
(1)server端
进入redis操作界面:
1
2
<code>xpleaf@xpleaf-machine:/mnt/hgfs/python/day7/redis-</code><code>2.8</code><code>.</code><code>9</code><code>/src$ redis-cli</code>
<code>127.0</code><code>.</code><code>0.1</code><code>:</code><code>6379</code><code>></code>
开始监听频道chan_107:
3
4
5
<code>127.0</code><code>.</code><code>0.1</code><code>:</code><code>6379</code><code>> subscribe chan_107</code>
<code>reading messages... (press ctrl-c to quit)</code>
<code>1</code><code>) </code><code>"subscribe"</code>
<code>2</code><code>) </code><code>"chan_107"</code>
<code>3</code><code>) (integer) </code><code>1</code>
(2)client端
创建redis_connector.py文件,用以连接server端redis:
<code>#!/usr/bin/env python</code>
<code>import</code> <code>redis</code>
<code>r = redis.redis(host=</code><code>'192.168.1.112'</code><code>,port=</code><code>6379</code><code>,db=</code><code>0</code><code>)</code>
在python交互器中导入redis_connector,并发布消息:
<code>>>> redis.r.publish(</code><code>'chan_107'</code><code>,</code><code>'hello my name is xpleaf'</code><code>)</code>
<code>1l</code>
此时在server端中就能看到client端发布的消息了:
6
7
8
<code>1</code><code>) </code><code>"message"</code>
<code>3</code><code>) </code><code>"hello my name is xpleaf"</code>
2.方法二:server端使用python程序+client端使用python交互器
程序代码如下:
9
10
<code>import</code> <code>redis_connector </code><code>as</code> <code>redis</code>
<code>channel = </code><code>'chan_107'</code> <code>#频道应该要和发布者的一样,否则将无法订阅到发布者发布的消息</code>
<code>msg_queue = redis.r.pubsub() #bind listen instance</code>
<code>msg_queue.subscribe(channel)</code>
<code>while</code> <code>true:</code>
<code> </code><code>data = msg_queue.parse_response() #waiting </code><code>for</code> <code>the publisher</code>
<code> </code><code>print data</code>
可以看到这里也导入了redis_connector模块用来连接本地的redis数据库,跟client端的类似,只是ip地址改为'localhost',如下:
<code>r = redis.redis(host=</code><code>'localhost'</code><code>,port=</code><code>6379</code><code>,db=</code><code>0</code><code>)</code>
msg_queue.parse_response()即是用来响应client端发布的消息,执行该程序,开始监听消息:
<code>xpleaf@xpleaf-machine:/mnt/hgfs/python/day7/monitor/m_server/core$ python redis_sub.py </code>
<code>===>光标停在此处,开始监听client端发布的消息</code>
创建redis_connector.py文件,用以连接server端redis:
<code>>>> redis.r.publish(</code><code>'chan_107'</code><code>,</code><code>'hello my name is yonghaoye'</code><code>)</code>
<code>2l</code>
<code>>>> redis.r.publish(</code><code>'chan_107'</code><code>,</code><code>'second msg'</code><code>)</code>
上面两步其实和方法一是一样的。
此时在server端中也可以订阅到client端发布的消息了:
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'hello my name is yonghaoye'</code><code>]</code>
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'second msg'</code><code>]</code>
<code>===>光标停在此处,继续监听client端发布的消息</code>
3.方法三:server端使用python程序+client端使用python程序
直接给出client端的程序代码:
<code>for</code> <code>i </code><code>in</code> <code>range(</code><code>10</code><code>):</code>
<code> </code><code>redis.r.publish(</code><code>'chan_107'</code><code>,</code><code>'this is the no.%s msg i send to you'</code> <code>% i)</code>
server端开始监听:
<code>xpleaf@xpleaf-machine:/mnt/hgfs/python/day7/monitor/m_server/core$ python redis_sub.py</code>
client端发布消息:
<code>[root@moban ~]# python publish.py</code>
在server端中很快就可以监听到client端发布的消息:
11
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'this is the no.0 msg i send to you'</code><code>]</code>
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'this is the no.1 msg i send to you'</code><code>]</code>
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'this is the no.2 msg i send to you'</code><code>]</code>
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'this is the no.3 msg i send to you'</code><code>]</code>
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'this is the no.4 msg i send to you'</code><code>]</code>
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'this is the no.5 msg i send to you'</code><code>]</code>
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'this is the no.6 msg i send to you'</code><code>]</code>
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'this is the no.7 msg i send to you'</code><code>]</code>
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'this is the no.8 msg i send to you'</code><code>]</code>
<code>[</code><code>'message'</code><code>, </code><code>'chan_107'</code><code>, </code><code>'this is the no.9 msg i send to you'</code><code>]</code>