您的位置:首页 > 其它

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)

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: