zmq 三种模式
第一种:
Request-Reply(半双工)模式:
#半双工,多客户端多客户端,一问一答模式,多客户端可以通过中间设置代理
#
#server端
import zmq
content = zmq.Context()
sock = content.socket(zmq.REP)
sock.bind("tcp://127.0.0.1:8017")
while True:
receive = sock.recv()
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()
第二种:
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")
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)
socket.bind('tcp://*:5557')
while True:
data = raw_input('input your data:')
socket.send(data)
#work端
import zmq
context = zmq.Context()
recive = context.socket(zmq.PULL)
recive.connect('tcp://127.0.0.1:5557')
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()