- 浏览: 463004 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
kc_hxd_jp:
博主问个问题,这个篇幅下的python代码无法达到应有的作用, ...
zeroMQ初体验-14.命名机制 进阶 -
kobe1029:
Map<String, Object> args ...
rabbitmq 队列长度预设的曲线方案 -
Sasoritattoo:
LZ,这都13年了,抽空把这篇文章的下文给表完了吧,这一口气喘 ...
nginx + gridfs + mongodb 大事记(残) -
3GQQ2012:
引用前文已经说过,XREP其实用以平衡负载,所以这里由它对请求 ...
zeroMQ初体验-15.应答模式进阶(一)-数据的封装 -
iyuan:
ustclz 写道图片怎么显示不了了。。我这看是可以显示的。不 ...
zeroMQ初体验-1.简介及C/S模式
恩,这应该算是比较实用的部分了。
模式图:
作为一个异步的服务器,详图应该是这样的:
这里的数据传递顺序是这样的:
在这里有可能碰到一个比较经典的c/s问题:
c端太多,耗尽s端资源怎么办?
这就需要靠谱些的机制了,比如通过“心跳”来确定是否应该释放这个c端的资源等。当然,那就是另外一个话题了。
(未完待续)
就是直接拿的官网的例子。原来是声明了setsockopt就可以用的。也可能是zmq版本更新了导致的吧。zmq这块目前还没什么机会用到,有时间还得再捋下,初体验还是太浅了,哈哈
模式图:
import zmq import threading import time from random import choice class ClientTask(threading.Thread): """ClientTask""" def init(self): threading.Thread.init (self) def run(self): context = zmq.Context() socket = context.socket(zmq.XREQ) identity = 'worker-%d' % (choice([0,1,2,3,4,5,6,7,8,9])) socket.setsockopt(zmq.IDENTITY, identity ) socket.connect('tcp://localhost:5570') print 'Client %s started' % (identity) poll = zmq.Poller() poll.register(socket, zmq.POLLIN) reqs = 0 while True: for i in xrange(5): sockets = dict(poll.poll(1000)) if socket in sockets: if sockets[socket] == zmq.POLLIN: msg = socket.recv() print '%s: %s\n' % (identity, msg) del msg reqs = reqs + 1 print 'Req #%d sent..' % (reqs) socket.send('request #%d' % (reqs)) socket.close() context.term() class ServerTask(threading.Thread): """ServerTask""" def init(self): threading.Thread.init (self) def run(self): context = zmq.Context() frontend = context.socket(zmq.XREP) frontend.bind('tcp://*:5570') backend = context.socket(zmq.XREQ) backend.bind('inproc://backend') workers = [] for i in xrange(5): worker = ServerWorker(context) worker.start() workers.append(worker) poll = zmq.Poller() poll.register(frontend, zmq.POLLIN) poll.register(backend, zmq.POLLIN) while True: sockets = dict(poll.poll()) if frontend in sockets: if sockets[frontend] == zmq.POLLIN: msg = frontend.recv() print 'Server received %s' % (msg) backend.send(msg) if backend in sockets: if sockets[backend] == zmq.POLLIN: msg = backend.recv() frontend.send(msg) frontend.close() backend.close() context.term() class ServerWorker(threading.Thread): """ServerWorker""" def init(self, context): threading.Thread.init (self) self.context = context def run(self): worker = self.context.socket(zmq.XREQ) worker.connect('inproc://backend') print 'Worker started' while True: msg = worker.recv() print 'Worker received %s' % (msg) replies = choice(xrange(5)) for i in xrange(replies): time.sleep(1/choice(range(1,10))) worker.send(msg) del msg worker.close() def main(): """main function""" server = ServerTask() server.start() for i in xrange(3): client = ClientTask() client.start() server.join() if name == "main": main()
作为一个异步的服务器,详图应该是这样的:
这里的数据传递顺序是这样的:
client server frontend worker [ XREQ ]<---->[ XREP <----> XREQ <----> XREQ ] 1 part 2 parts 2 parts
在这里有可能碰到一个比较经典的c/s问题:
c端太多,耗尽s端资源怎么办?
这就需要靠谱些的机制了,比如通过“心跳”来确定是否应该释放这个c端的资源等。当然,那就是另外一个话题了。
(未完待续)
评论
2 楼
iyuan
2012-02-06
guozhiwei 写道
这个例子应该就是 官方提供的包里面的example包里面的Python中的asyncsrv.py
你这个例子有些地方跟它不一样,
你的例子 跑不起来
而官方的例子能跑起来...
你的例子在send 和 recv的时没有identity,加上以后就能正常跑了.
你这个例子有些地方跟它不一样,
你的例子 跑不起来
而官方的例子能跑起来...
你的例子在send 和 recv的时没有identity,加上以后就能正常跑了.
就是直接拿的官网的例子。原来是声明了setsockopt就可以用的。也可能是zmq版本更新了导致的吧。zmq这块目前还没什么机会用到,有时间还得再捋下,初体验还是太浅了,哈哈
1 楼
guozhiwei
2012-02-06
这个例子应该就是 官方提供的包里面的example包里面的Python中的asyncsrv.py
你这个例子有些地方跟它不一样,
你的例子 跑不起来
而官方的例子能跑起来...
你的例子在send 和 recv的时没有identity,加上以后就能正常跑了.
你这个例子有些地方跟它不一样,
你的例子 跑不起来
而官方的例子能跑起来...
你的例子在send 和 recv的时没有identity,加上以后就能正常跑了.
发表评论
-
IM选型(初)
2016-08-23 19:12 1589主要参考文章: https://r ... -
关于python和rabbitmq的那点事儿
2011-10-19 14:15 7910rabbitmq是一个消息中间件,在之前的zmq介绍中有略带提 ... -
zeroMQ初体验-34.发布/订阅模式进阶-克隆模式-下,结言
2011-05-26 16:09 4072服务器: // // Clone server Mod ... -
zeroMQ初体验-33.发布/订阅模式进阶-克隆模式-中
2011-05-26 15:37 2854临时缓存 现实中,比如 ... -
zeroMQ初体验-32.发布/订阅模式进阶-克隆模式-上
2011-05-26 15:04 3599在发布/订阅模式中,特别是现实应用中,总会因为这样那样的问题导 ... -
zeroMQ初体验-31.发布/订阅模式进阶-黑盒的高速订阅者
2011-05-25 16:55 2706作为发布/订阅模式的一个常用场景,大数据量的组播是有必要的。虽 ... -
zeroMQ初体验-30.发布/订阅模式进阶-自裁的蜗牛订阅者
2011-05-25 16:24 4484在初次介绍发布/订阅模式的时候,就已经抖出了这个包袱:如果订阅 ... -
zeroMQ初体验-29.可靠性-自由模式
2011-05-24 17:02 5351好吧,本以为这可能是一个更靠谱的模式,谁知(其实是我一厢情愿了 ... -
zeroMQ初体验-28.可靠性-主从模式
2011-05-23 14:47 5453虽然"硬盘模式" ... -
zeroMQ初体验-27.可靠性-硬盘模式
2011-05-23 13:44 3744在之前的种种模式中, ... -
zeroMQ初体验-26.可靠性-管家模式
2011-05-12 19:05 5607上一节末尾有说到协议,zeromq自然做了充沛的封装,&quo ... -
zeroMQ初体验-26.可靠性-管家模式
2011-05-12 19:03 1上一节末尾有说到协议,zeromq自然做了充沛的封装,&quo ... -
zeroMQ初体验-25.可靠性-偏执的海盗模式
2011-05-05 19:05 3500虽然说“简单的海盗模 ... -
zeroMQ初体验-24.可靠性-简单的海盗模式
2011-05-05 16:41 3160相较于“懒惰的”做了 ... -
zeroMQ初体验-23.可靠性-懒惰的海盗模式
2011-05-05 16:15 5012相较于通常的阻塞模式,这里只是做了一点简单的动作来加强系统的可 ... -
zeroMQ初体验-22.可靠性-总览
2011-04-26 19:25 5859在开篇就从曾对zeromq的可靠性做过质疑,不过,作为一个雄心 ... -
rabbitmq 队列长度预设的曲线方案
2011-04-21 14:36 3310zeromq中倒是直接支持这个功能的。 类似于设定队列长度或 ... -
zeroMQ初体验-21.应答模式进阶(七)-云计算
2011-04-18 19:14 3475这里给出了一个最近很火的"云计算"案例。 ... -
zeroMQ初体验-20.应答模式进阶(六)-多对多路由模式
2011-04-18 17:22 3806某些时候,为了冗余的需要,可能会有这样的需求: impo ... -
zeroMQ初体验-18.应答模式进阶(四)-定制路由3
2011-04-02 15:39 5123从经典到超越经典。 首 ...
相关推荐
zeromq-2.1.7.tar.gz 的早期的一个版本,本人已安装成功 放心使用
zeromq-4.0.3.tar.gz zeromq-4.0.3.tar.gz zeromq-4.0.3.tar.gz
zeromq-4.3.2.tar.gz,可在linux下编译安装,能够使用zeromq进行sorket开发,多线程,提升性能,效率,可以配合msgpack进行使用,是个好的扩展插件
zeromq-4.1.3.tar.gz,最新的zeromq的开发工具包,希望对开发者有用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
zeromq-4.1.8.tar.gz 有问题请联系
zeromq-2.1.9.tar.gz 这是zeromq linux 官方原版 请放心下载
zeromq-4.2.3.tar.gz 一个稳定的版本,可以安装使用!
0MQ version 4.3.4 stable, released on 2021/01/17
storm搭建所需资源
在官网下载zeromq太慢了,网速极不稳定,特意下载放在这里供大家下载,当然象征性地赚点 资源分
ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。
ZeroMQ是一个网络通讯库,其主要用来为分布式应用程序开发提供进程间通信(此处的进程既可以是同一台机器上的两个进程也可以是不同机器上的两个进程)。ZeroMQ的特点在于灵活的通信手段和丰富的连接模型,并且它可以...
ZeroMQ是一个网络通讯库,其主要用来为分布式应用程序开发提供进程间通信(此处的进程既可以是同一台机器上的两个进程也可以是不同机器上的两个进程)。ZeroMQ的特点在于灵活的通信手段和丰富的连接模型,并且它可以...
0MQ version 4.3.4 stable, released on 2021/01/17
ZeroMQ(也说明 ØMQ,0MQ 或 ZMQ)是一个高性能的异步消息库,旨在使用分布式或并行应用程序。它提供了一个消息队列,但 不同于面向消息的中间件,一个 ZeroMQ 系统可以在没有专用运行消息代理。jzmq安装包,本人也...
zeroMQ 4.2.3版本 zeromq-4.2.3.tar.gz 欢迎关注我的CSDN博客:https://mp.csdn.net/console/home 免积分下载
zeromq-4.2.5.tar.gz
VS2015 在Widows 10 上编译的 ZeroMQ 4.3.2,JZMQ 3.1 CZMQ 4.2,可以在 JDK 1.8 下运行。DLL 都是 64位,包含了编译及运行相关信息。分享一下,也给自己留个备份