ZeroMQ是一个消息队列网络库,实现网络常用技术封装。

Request-Reply应答模式:

所谓应答模式,就是一问一答,规则有这么几条

  1. 必须先提问,后回答
  2. 对于一个提问,只能回答一次
  3. 在没有收到回答前不能再次提问

在这里插入图片描述

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系列

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐