ZeroMQ是一個(gè)消息隊列網(wǎng)絡(luò )庫,實(shí)現網(wǎng)絡(luò )常用技術(shù)封裝。在C/S中實(shí)現了三種模式,這段時(shí)間用python簡(jiǎn)單實(shí)現了一下,感覺(jué)python雖然靈活。但是數據處理不如C++自由靈活。
1.Request-Reply模式:
客戶(hù)端在請求后,服務(wù)端必須回響應

server:

1 #!/usr/bin/python 2 #-*-coding:utf-8-*- 3 import time 4 import zmq 5 6 context = zmq.Context() 7 socket = context.socket(zmq.REP) 8 socket.bind("tcp://*:5555") 9 10 while True:11 message = socket.recv()12 print message13 #time.sleep(1)14 socket.send("server response!")

client:

1 #!/usr/bin/python 2 #-*-coding:utf-8-*- 3 4 import zmq 5 import sys 6 7 context = zmq.Context() 8 socket = context.socket(zmq.REQ) 9 socket.connect("tcp://localhost:5555")10 11 while(True):12 data = raw_input("input your data:")13 if data == 'q':14 sys.exit()15 16 socket.send(data)17 18 response = socket.recv();19 print response

2.Publish-Subscribe模式:
廣播所有client,沒(méi)有隊列緩存,斷開(kāi)連接數據將永遠丟失。client可以進(jìn)行數據過(guò)濾。

server:

1 #!/usr/bin/python 2 #-*-coding:utf-8-*- 3 4 import zmq 5 context = zmq.Context() 6 socket = context.socket(zmq.PUB) 7 socket.bind("tcp://127.0.0.1:5000") 8 while True: 9 msg = raw_input('input your data:') 10 socket.send(msg)

client:

1 #!/usr/bin/python 2 #-*-coding:utf-8-*- 3 4 import time 5 import zmq 6 context = zmq.Context() 7 socket = context.socket(zmq.SUB) 8 socket.connect("tcp://127.0.0.1:5000") 9 socket.setsockopt(zmq.SUBSCRIBE,'') 10 while True: 11 print socket.recv()

3.Parallel Pipeline模式:
由三部分組成,push進(jìn)行數據推送,work進(jìn)行數據緩存,pull進(jìn)行數據競爭獲取處理。區別于Publish-Subscribe存在一個(gè)數據緩存和處理負載。
當連接被斷開(kāi),數據不會(huì )丟失,重連后數據繼續發(fā)送到對端。

server:

1 #!/usr/bin/python 2 #-*-coding:utf-8-*- 3 4 import zmq 5 6 context = zmq.Context() 7 8 socket = context.socket(zmq.PULL) 9 socket.bind('tcp://*:5558')10 11 while True:12 data = socket.recv()13 print data

work:

1 #!/usr/bin/python 2 #-*-coding:utf-8-*- 3 4 import zmq 5 6 context = zmq.Context() 7 8 recive = context.socket(zmq.PULL) 9 recive.connect('tcp://127.0.0.1:5557')10 11 sender = context.socket(zmq.PUSH)12 sender.connect('tcp://127.0.0.1:5558')13 14 while True:15 data = recive.recv()16 sender.send(data)

client:

1 #!/usr/bin/python 2 #-*-coding:utf-8-*- 3 4 import zmq 5 import time 6 7 context = zmq.Context() 8 socket = context.socket(zmq.PUSH) 9 10 socket.bind('tcp://*:5557')11 12 while True:13 data = raw_input('input your data:')14 socket.send(data)

消息結構:
在每個(gè)消息buff前均會(huì )自帶一個(gè)buff長(cháng)度


聯(lián)系客服