zeroMQ初体验-15.应答模式进阶(一)-数据的封装
2011-10-10 15:28
337 查看
整整一大章全部讲的应答模式的进阶,应该很重要吧(简直是一定的)。
上一节讲到了发布/订阅模式 关于封装的话题,在应答模式中也是如此,不过这个动作已经被底层(zeromq)接管,对应用透明。而其中普通模式与X模式又有区别,例如:req连接Xrep:
说明:
第三部分是实际发送的数据
第二部分是REQ向XREP发送请求时底层附加的
第一部分是XREP自身地址
注意:
前文已经说过,XREP其实用以平衡负载,所以这里由它对请求数据做了封装操作,如果通过多个XREP,数据结构就会变成这个样子:
同时,如果没有启用命名机制,XREP会自动赋予临时名字:
不然,就是这样了:
这里给出一个验证代码:
Python代码
import zmq
import zhelpers
context = zmq.Context()
sink = context.socket(zmq.XREP)
sink.bind("inproc://example")
# First allow 0MQ to set the identity
anonymous = context.socket(zmq.XREQ)
anonymous.connect("inproc://example")
anonymous.send("XREP uses a generated UUID")
zhelpers.dump(sink)
# Then set the identity ourself
identified = context.socket(zmq.XREQ)
identified.setsockopt(zmq.IDENTITY, "Hello")
identified.connect("inproc://example")
identified.send("XREP socket uses REQ's socket identity")
zhelpers.dump(sink)
上面的代码用到的zhelpers:
Python代码
from random import randint
import zmq
# Receives all message parts from socket, prints neatly
def dump(zsocket):
print "----------------------------------------"
for part in zsocket.recv_multipart():
print "[%03d]" % len(part),
if all(31 < ord(c) < 128 for c in part):
print part
else:
print "".join("%x" % ord(c) for c in part)
# Set simple random printable identity on socket
def set_id(zsocket):
identity = "%04x-%04x" % (randint(0, 0x10000), randint(0, 0x10000))
zsocket.setsockopt(zmq.IDENTITY, identity)
上一节讲到了发布/订阅模式 关于封装的话题,在应答模式中也是如此,不过这个动作已经被底层(zeromq)接管,对应用透明。而其中普通模式与X模式又有区别,例如:req连接Xrep:
说明:
第三部分是实际发送的数据
第二部分是REQ向XREP发送请求时底层附加的
第一部分是XREP自身地址
注意:
前文已经说过,XREP其实用以平衡负载,所以这里由它对请求数据做了封装操作,如果通过多个XREP,数据结构就会变成这个样子:
同时,如果没有启用命名机制,XREP会自动赋予临时名字:
不然,就是这样了:
这里给出一个验证代码:
Python代码
import zmq
import zhelpers
context = zmq.Context()
sink = context.socket(zmq.XREP)
sink.bind("inproc://example")
# First allow 0MQ to set the identity
anonymous = context.socket(zmq.XREQ)
anonymous.connect("inproc://example")
anonymous.send("XREP uses a generated UUID")
zhelpers.dump(sink)
# Then set the identity ourself
identified = context.socket(zmq.XREQ)
identified.setsockopt(zmq.IDENTITY, "Hello")
identified.connect("inproc://example")
identified.send("XREP socket uses REQ's socket identity")
zhelpers.dump(sink)
import zmq import zhelpers context = zmq.Context() sink = context.socket(zmq.XREP) sink.bind("inproc://example") # First allow 0MQ to set the identity anonymous = context.socket(zmq.XREQ) anonymous.connect("inproc://example") anonymous.send("XREP uses a generated UUID") zhelpers.dump(sink) # Then set the identity ourself identified = context.socket(zmq.XREQ) identified.setsockopt(zmq.IDENTITY, "Hello") identified.connect("inproc://example") identified.send("XREP socket uses REQ's socket identity") zhelpers.dump(sink)
上面的代码用到的zhelpers:
Python代码
from random import randint
import zmq
# Receives all message parts from socket, prints neatly
def dump(zsocket):
print "----------------------------------------"
for part in zsocket.recv_multipart():
print "[%03d]" % len(part),
if all(31 < ord(c) < 128 for c in part):
print part
else:
print "".join("%x" % ord(c) for c in part)
# Set simple random printable identity on socket
def set_id(zsocket):
identity = "%04x-%04x" % (randint(0, 0x10000), randint(0, 0x10000))
zsocket.setsockopt(zmq.IDENTITY, identity)
相关文章推荐
- zeroMQ初体验-16.应答模式进阶(二)-定制路由1
- zeroMQ初体验-17.应答模式进阶(三)-定制路由2
- zeroMQ初体验-18.应答模式进阶(四)-定制路由3
- zeroMQ初体验-19.应答模式进阶(五)-异步式应答
- zeroMQ初体验-20.应答模式进阶(六)-多对多路由模式
- zeroMQ初体验-21.应答模式进阶(七)-云计算
- zeroMQ初体验-13.发布/订阅模式 进阶
- zeroMQ初体验-30.发布/订阅模式进阶-自裁的蜗牛订阅者
- zeroMQ初体验-31.发布/订阅模式进阶-黑盒的高速订阅者
- zeroMQ初体验-32.发布/订阅模式进阶-克隆模式-上
- zeroMQ初体验-34.发布/订阅模式进阶-克隆模式-下,结言
- zeroMQ初体验-6.多模式数据来源处理方案(multi sockets)
- ZeroMQ指南:第3章:高级请求-应答模式
- zeroMQ初体验-29.可靠性-自由模式
- 数据挖掘进阶之序列模式分析算法GSP的实现
- 使用单例模式封装Intent(实现跳转与携带数据跳转,顺带发送广播)
- struts2_day02_15-封装数据到list集合_16-封装数据到map集合
- Python实现ZeroMQ请求-应答模式
- 基于对WalkGIS 的地形数据建库处理模式的探讨 来自建筑工程与设计 2015(15)
- 设计技巧39:利用Visitor模式实现对现有数据的封装和功能的添加