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()