浏览 2467 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-31
最后修改:2011-04-01
上一节讲到了发布/订阅模式 关于封装的话题,在应答模式中也是如此,不过这个动作已经被底层(zeromq)接管,对应用透明。而其中普通模式与X模式又有区别,例如:req连接Xrep: 说明: 第三部分是实际发送的数据 第二部分是REQ向XREP发送请求时底层附加的 第一部分是XREP自身地址 注意: 前文已经说过,XREP其实用以平衡负载,所以这里由它对请求数据做了封装操作,如果通过多个XREP,数据结构就会变成这个样子: 同时,如果没有启用命名机制,XREP会自动赋予临时名字: 不然,就是这样了: 这里给出一个验证代码: 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: 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) (未完待续) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |