【Python之旅】第七篇(三):使用Redis訂閱服務

香飄葉子發表於2016-05-10

 在C/S架構中,可以充分地利用Redis訂閱服務,實現伺服器端和客戶端的資訊收發,下面說說在Python中如何使用Redistribute的訂閱服務。

    這裡要舉的例子是,Server端進行服務的訂閱,而Client端進行訊息的廣播傳送。


1.方法一:Server端使用Redis操作+Client端使用Python互動器

(1)Server端

    進入Redis操作介面:

1
2
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day7/redis-2.8.9/src$ redis-cli
127.0.0.1:6379>

    開始監聽頻道chan_107:

1
2
3
4
5
127.0.0.1:6379> SUBSCRIBE chan_107
Reading messages... (press Ctrl-C to quit)
1"subscribe"
2"chan_107"
3) (integer) 1


(2)Client端

    建立redis_connector.py檔案,用以連線Server端Redis:

1
2
3
#!/usr/bin/env python
import redis
r = redis.Redis(host=`192.168.1.112`,port=6379,db=0)

    在Python互動器中匯入redis_connector,併發布訊息:

1
2
>>> redis.r.publish(`chan_107`,`hello my name is xpleaf`)
1L

    

    此時在Server端中就能看到Client端釋出的訊息了:

1
2
3
4
5
6
7
8
127.0.0.1:6379> SUBSCRIBE chan_107
Reading messages... (press Ctrl-C to quit)
1"subscribe"
2"chan_107"
3) (integer) 1
1"message"
2"chan_107"
3"hello my name is xpleaf"


2.方法二:Server端使用Python程式+Client端使用Python互動器

(1)Server端

    程式程式碼如下:

1
2
3
4
5
6
7
8
9
10
import redis_connector as redis
 
channel = `chan_107`    #頻道應該要和釋出者的一樣,否則將無法訂閱到釋出者釋出的訊息
 
msg_queue = redis.r.pubsub() #bind listen instance
msg_queue.subscribe(channel)
 
while True:
    data = msg_queue.parse_response() #waiting for the publisher
    print data

    可以看到這裡也匯入了redis_connector模組用來連線本地的Redis資料庫,跟Client端的類似,只是IP地址改為`localhost`,如下:

1
2
3
#!/usr/bin/env python
import redis
r = redis.Redis(host=`localhost`,port=6379,db=0)

    msg_queue.parse_response()即是用來響應Client端釋出的訊息,執行該程式,開始監聽訊息:

1
2
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day7/monitor/m_server/core$ python redis_sub.py 
===>游標停在此處,開始監聽Client端釋出的訊息


(2)Client端

    建立redis_connector.py檔案,用以連線Server端Redis:

1
2
3
#!/usr/bin/env python
import redis
r = redis.Redis(host=`192.168.1.112`,port=6379,db=0)

    在Python互動器中匯入redis_connector,併發布訊息:

1
2
3
4
>>> redis.r.publish(`chan_107`,`hello my name is yonghaoye`)
2L
>>> redis.r.publish(`chan_107`,`second msg`)
2L

    上面兩步其實和方法一是一樣的。


    此時在Server端中也可以訂閱到Client端釋出的訊息了:

1
2
3
4
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day7/monitor/m_server/core$ python redis_sub.py 
[`message``chan_107``hello my name is yonghaoye`]
[`message``chan_107``second msg`]
===>游標停在此處,繼續監聽Client端釋出的訊息


3.方法三:Server端使用Python程式+Client端使用Python程式

    直接給出Client端的程式程式碼:

1
2
3
4
import redis_connector as redis
 
for in range(10):
        redis.r.publish(`chan_107`,`This is the NO.%s msg I send to you` % i)

    Server端開始監聽:

1
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day7/monitor/m_server/core$ python redis_sub.py

    Client端釋出訊息:

1
[root@moban ~]# python publish.py

    

    在Server端中很快就可以監聽到Client端釋出的訊息:

1
2
3
4
5
6
7
8
9
10
11
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day7/monitor/m_server/core$ python redis_sub.py 
[`message``chan_107``This is the NO.0 msg I send to you`]
[`message``chan_107``This is the NO.1 msg I send to you`]
[`message``chan_107``This is the NO.2 msg I send to you`]
[`message``chan_107``This is the NO.3 msg I send to you`]
[`message``chan_107``This is the NO.4 msg I send to you`]
[`message``chan_107``This is the NO.5 msg I send to you`]
[`message``chan_107``This is the NO.6 msg I send to you`]
[`message``chan_107``This is the NO.7 msg I send to you`]
[`message``chan_107``This is the NO.8 msg I send to you`]
[`message``chan_107``This is the NO.9 msg I send to you`]


相關文章