1.Request-Reply模式:
客戶端在請求后,服務端必須回響應
server:
#!/usr/bin/python #-*-coding:utf-8-*- import time import zmq context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:5555") while True: message = socket.recv() print(message) #time.sleep(1) socket.send("server response!")
client:
#!/usr/bin/python #-*-coding:utf-8-*- import zmq import sys context = zmq.Context() socket = context.socket(zmq.REQ) socket.connect("tcp://localhost:5555") while(True): data = raw_input("input your data:") if data == 'q': sys.exit() socket.send(data) response = socket.recv(); print(response)
2.Publish-Subscribe模式:
廣播所有client,沒有隊列緩存,斷開連接數據將永遠丟失。client可以進行數據過濾。
server:
#!/usr/bin/python #-*-coding:utf-8-*- import zmq context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://127.0.0.1:5000") while True: msg = raw_input('input your data:') socket.send(msg)
client:
#!/usr/bin/python #-*-coding:utf-8-*- import time import zmq context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://127.0.0.1:5000")
# 這里設置的是過濾條件,不然無法收到消息 socket.setsockopt(zmq.SUBSCRIBE,'') while True: print socket.recv()
3.Parallel Pipeline模式:
由三部分組成,push進行數據推送,work進行數據緩存,pull進行數據競爭獲取處理。區別於Publish-Subscribe存在一個數據緩存和處理負載。
當連接被斷開,數據不會丟失,重連后數據繼續發送到對端。
server:
#!/usr/bin/python #-*-coding:utf-8-*- import zmq context = zmq.Context() socket = context.socket(zmq.PULL) socket.bind('tcp://*:5558') while True: data = socket.recv() 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:
#!/usr/bin/python #-*-coding:utf-8-*- import zmq import time context = zmq.Context() socket = context.socket(zmq.PUSH) socket.bind('tcp://*:5557') while True: data = raw_input('input your data:') socket.send(data)
消息結構:
在每個消息buff前均會自帶一個buff長度