zmq 三種模式json
第一種:
Request-Reply(半雙工)模式:
#半雙工,多客戶端多客戶端,一問一答模式,多客戶端能夠經過中間設置代理
#
#server端
import zmq
content = zmq.Context()
sock = content.socket(zmq.REP)
sock.bind("tcp://127.0.0.1:8017")socket
while True:
receive = sock.recv()tcp
print receive
if receive == str(1):
sock.send("ok")
else:
sock.send("success")
#client端
#半雙工,一問一答,通訊協議server REP(reply),client REQ(request)
import zmq
content = zmq.Context()
sock = content.socket(zmq.REQ)
sock.connect("tcp://127.0.0.1:8017")代理
while True:
sock.send(raw_input(">>"))
print sock.recv()server
第二種:
Publish-Subscribe(廣播訂閱)模式:
#server端
#廣播,服務端發送,客戶端被動接收,通訊協議server PUB,client SUB,客戶端能夠設置過濾條件來是否接收廣播信息
import zmq
content = zmq.Context()
sock = content.socket(zmq.PUB)
sock.bind("tcp://127.0.0.1:8017")ip
while True:
sock.send(raw_input(">>"))
#client端
#廣播,被動接受,setsockopt 設置過濾,zmq.SUBSCRIBE 過濾主題也就是內容的頭部爲test的才接收
import zmq
content = zmq.Context()
sock = content.socket(zmq.SUB)
sock.connect("tcp://127.0.0.1:8017")
sock.setsockopt(zmq.SUBSCRIBE,"test")
while True:
print sock.recv()
第三種:
Parallel Pipeline(管道)模式
#server push,work pull,而後在push
#client pull
#server端
import time
import zmq
context = zmq.Context()
socket = context.socket(zmq.PUSH)ci
socket.bind('tcp://*:5557')input
while True:
data = raw_input('input your data:')
socket.send(data)
#work端
import zmq
context = zmq.Context()test
recive = context.socket(zmq.PULL)
recive.connect('tcp://127.0.0.1:5557')import
sender = context.socket(zmq.PUSH)
sender.connect('tcp://127.0.0.1:5558')
while True:
data = recive.recv()
sender.send(data)
#client端
import zmq
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.bind('tcp://*:5558')
while True:
data = socket.recv()
print data
一二混搭:
#server端 混搭時必定要記得第一種模式的一問一答模式(客戶端發出消息,服務端接收並回應,而後客戶端在接收消息)
import zmq
content = zmq.Context()
sock = content.socket(zmq.PUB)
sock.bind("tcp://127.0.0.1:8018")
receive = content.socket(zmq.REP)
receive.bind("tcp://127.0.0.1:8019")
while True:
send = raw_input(">>")
sock.send(send)
data = receive.recv()
print eval(data)
receive.send("ok")
#client端
import zmq
import json
content = zmq.Context()
sock = content.socket(zmq.SUB)
sock.connect("tcp://127.0.0.1:8018")
sock.setsockopt(zmq.SUBSCRIBE,"")
sender = content.socket(zmq.REQ)
sender.connect("tcp://127.0.0.1:8019")
while True: receive = sock.recv() print receive if receive=="test.ping": sender_content = "id:\n true" else: sender_content = "id:\n false" sender.send(json.dumps(sender_content)) print sender.recv()