Python使用ZeroMQ的三种模型
ZeroMQ是一个消息队列网络库,实现网络常用技术封装。Request-Reply应答模式:所谓应答模式,就是一问一答,规则有这么几条必须先提问,后回答对于一个提问,只能回答一次在没有收到回答前不能再次提问server:#!/usr/bin/python#-*-coding:utf-8-*-import timeimport zmqcontext = zmq.Cont...
·
ZeroMQ是一个消息队列网络库,实现网络常用技术封装。
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
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()
Parallel Pipeline模式:
由三部分组成,push进行数据推送,work进行数据缓存,pull进行数据竞争获取处理。区别于Publish-Subscribe存在一个数据缓存和处理负载。
当连接被断开,数据不会丢失,重连后数据继续发送到对端。
push端只管向外推送数据,而不关心有多少个pull端连接自己,pull端呢,只管等待消息,至于各个pull端是如何竞争的,我们不需要考虑,一个任务数据,只会被一个pull端接收,这个模式像不像一个小的负载均衡呢。
在push/pull模式中,服务端和客户端谁都可以先启动,一方断掉不会影响到另一方。
push:
#!/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)
work:
#!/usr/bin/python
#-*-coding:utf-8-*-
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)
pull:
#!/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
原文链接与参考
ZeroMQ - 三种模型的python实现
python与zmq系列
更多推荐
已为社区贡献1条内容
所有评论(0)