- 浏览: 53047 次
- 性别:
- 来自: 北京
最新评论
-
lehehe:
基站定位,使用接口很方便的,这里有免费的接口,你可以试试,ht ...
google API基站定位 -
donkeyji:
yongqi 写道hi,你好,请教一个问题我在安装python ...
python zeromq 介绍 -
yongqi:
hi,你好,请教一个问题我在安装python的zeromq包时 ...
python zeromq 介绍 -
mimicom:
看着晕乎乎的....
python zeromq 介绍 -
raojl:
不错,好像zeromq就在2011年一夜之间火了,特别的blo ...
python zeromq 介绍
简介:
ZeroMQ并不是一个对socket的封装,不能用它去实现已有的网络协议。
它有自己的模式,不同于更底层的点对点通讯模式。
它有比tcp协议更高一级的协议。(当然ZeroMQ不一定基于TCP协议,它也可以用于进程间和进程内通讯)
它改变了通讯都基于一对一的连接这个假设。
ZeroMQ把通讯的需要看成4类,其中一类是一对一结对通讯,用来支持传统的TCP socke模型,但并不推荐使用。
常用的通讯模式只有三类:
1.请求回应模型。由请求端发起请求,并等待回应端回应请求。从请求端来看,一定是一对对收发配对的;
反之,在回应端一定是发收对。请求端和回应端都可以是1:N的模型。通常把1认为是server,N认为是Client。
0MQ可以很好的支持路由功能(实现路由功能的组件叫做Device),把1:N扩展为N:M(只需要加入若干路由节点)。
从这个模型看,更底层的端点地址是对上层隐藏的。每个请求都隐含回应地址,而应用则不关心它。
2.发布订阅模型。这个模型里,发布端是单向只发送数据的,且不关心是否把全部的信息都发送给订阅者。
如果发布端开始发布信息的时候,订阅端尚未连接上,这些信息直接丢弃。
不过一旦订阅端连接上来,中间会保证没有信息丢失。
同样,订阅端则只负责接收,而不能反馈。
如果发布端和订阅端需要交互(比如要确认订阅者是否已经连接上),则使用额外的socket采用请求回应模型满足这个需求。
3.管道模型。这个模型里,管道是单向的,从PUSH端单向的向PULL端单向的推送数据流。
任何分布式,并行的需求,都可以用这三种模型组合起来解决问题。
问题1:安装zeromq和python binding?
答:
在安装zeromq之前需要安装
sudo apt-get install libtool, autoconf, automake, uuid-dev(or equivalent)
获得zeromq的源码包
wget http://download.zeromq.org/zeromq-2.0.10.tar.gz
如果想获得最新的源码包http://download.zeromq.org/
安装zeromq
tar zxvf zeromq-2.0.10.tar.gz
cd zeromq-2.0.10
(查看帮助 ./configure --help)
./configure
make
sudo make install
sudo ldconfig
安装python binding
获得pyzmq的源代码
https://github.com/zeromq/pyzmq/downloads/
pip install pyzmq
注意:pyzmq版本要与zeromq版本一致
问题2:zeromq的hello world?
答:
python examples https://github.com/imatix/zguide/tree/master/examples/Python
hwserver.py
# # Hello World server in Python # Binds REP socket to tcp://*:5555 # Expects "Hello" from client, replies with "World" # import zmq import time context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:5555") while True: # Wait for next request from client message = socket.recv() print "Received request: ", message # Do some 'work' time.sleep (1) # Do some 'work' # Send reply back to client socket.send("World")
hwclient.py
# # Hello World client in Python # Connects REQ socket to tcp://localhost:5555 # Sends "Hello" to server, expects "World" back # import zmq context = zmq.Context() # Socket to talk to server print "Connecting to hello world server..." socket = context.socket(zmq.REQ) socket.connect ("tcp://localhost:5555") # Do 10 requests, waiting each time for a response for request in range (1,10): print "Sending request ", request,"..." socket.send ("Hello") # Get the reply. message = socket.recv() print "Received reply ", request, "[", message, "]"
问题3:zeroMQ实现一个消息层?
答:
实现一个ZeroMQ消息层需要三个步骤:
1.选择传输协议
0MQ提供了4种不同的传输协议
INPROC an In-Process communication model
IPC an Inter-Process communication model
MULTICAST multicast via PGM, possibly encapsulated in UDP
TCP a network based transport
2.建立基础
由于在网络中两个端点是相对动态的,很难有一个稳定的单一连接点。
如果是这种情况,可以使用由0MQ提供的转发设备。
转发设备可以绑定2个不同端口,并且转发消息从一个端点到另一个端点。
这样做的话,在网络中转发设备能够变成一个稳定的点,其它组件都可以去连接。
0MQ提供了3种类型的设备
QUEUE, a forwarder for the request/response messaging pattern
FORWARDER, a forwarder for the publish/subscribe messaging pattern
STREAMER, a forwarder for the pipelined messaging pattern
3.选择通讯模式
0MQ支持4种模式
REQUEST/REPLY, bidirectional, load balanced and state based
PUBLISH/SUBSCRIBE, publish to multiple recipients at once
UPSTREAM / DOWNSTREAM, distribute data to nodes arranged in a pipeline
PAIR, communication exclusively between peers
Req/Rep
均衡负载请求:
server 1
import zmq context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://127.0.0.1:5000") while True: msg = socket.recv() print "Got", msg socket.send(msg)
server 2
import zmq context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://127.0.0.1:6000") while True: msg = socket.recv() print "Got", msg socket.send(msg)
client
import zmq context = zmq.Context() socket = context.socket(zmq.REQ) socket.connect("tcp://127.0.0.1:5000") socket.connect("tcp://127.0.0.1:6000") for i in range(10): msg = "msg %s" % i socket.send(msg) print "Sending", msg msg_in = socket.recv()
会发现client的请求会被均衡的分配给两个server
Example client output:
Sending msg 0
Sending msg 1
Sending msg 2
Sending msg 3
Sending msg 4
Sending msg 5
Sending msg 6
Sending msg 7
Sending msg 8
Sending msg 9
Example output server 1 at port 5000:
Got msg 0
Got msg 2
Got msg 4
Got msg 6
Got msg 8
Example output server 2 at port 6000:
Got msg 1
Got msg 3
Got msg 5
Got msg 7
Got msg 9
现在,如果我们要加入一个额外的server去管理我们的请求,我们将不得不修改我们的代码。
这是非常麻烦的,我们需要让每个client都知道有一个额外的server可以均衡请求。
为了解决这个问题,替代client直接去连接多个server的方式,client去连接转发设备,再由转发设备路由全部的消息给server。
Pub/Sub
在pub/sub模式下组件是松耦合的。类似于广播电台。
一个广播server为现场足球赛
import zmq
from random import choice
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://127.0.0.1:5000")
countries = ['netherlands','brazil','germany','portugal']
events = ['yellow card', 'red card', 'goal', 'corner', 'foul']
while True:
msg = choice( countries ) +" "+ choice( events )
print "->",msg
socket.send( msg )
输出
-> portugal corner
-> portugal yellow card
-> portugal goal
-> netherlands yellow card
-> germany yellow card
-> brazil yellow card
-> portugal goal
-> germany corner
…
一个客户端去收听特定的消息
import zmq context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://127.0.0.1:5000") socket.setsockopt(zmq.SUBSCRIBE, "netherlands") socket.setsockopt(zmq.SUBSCRIBE, "germany") while True: print socket.recv()
输出
netherlands red card
netherlands goal
netherlands red card
germany foul
netherlands yellow card
germany foul
netherlands goal
netherlands corner
germany foul
netherlands corner
…
Pipelining
并发处理数据,其工作模式
一个工作者得到来自上游socket的消息,一旦处理完成后发送消息到下游。
Paired socket
服务器监听某个端口,客户端连接到这个端口,消息可以双向流动。
server
import zmq context = zmq.Context() socket = context.socket(zmq.PAIR) socket.bind("tcp://127.0.0.1:5555")
client
import zmq context = zmq.Context() socket = context.socket(zmq.PAIR) socket.connect("tcp://127.0.0.1:5555")
ps:
推荐
http://nichol.as/zeromq-an-introduction
评论
我在安装python的zeromq包时出现问题
zmq/core/_device.c:8:22: error: pyconfig.h: No such file or directory
zmq/core/_device.c:16:20: error: Python.h: No such file or directory
zmq/core/_device.c:18:6: error: #error Python headers needed to compile C extensions, please install development version of Python.
error: command 'gcc' failed with exit status 1
查了很多资料没有解决,请问你见过这个错误没有?
我使用java调用zeromq是可以正常运行的。
谢谢~~
安装python的开发包,需要依赖python来编译zmq的扩展模块
我在安装python的zeromq包时出现问题
zmq/core/_device.c:8:22: error: pyconfig.h: No such file or directory
zmq/core/_device.c:16:20: error: Python.h: No such file or directory
zmq/core/_device.c:18:6: error: #error Python headers needed to compile C extensions, please install development version of Python.
error: command 'gcc' failed with exit status 1
查了很多资料没有解决,请问你见过这个错误没有?
我使用java调用zeromq是可以正常运行的。
谢谢~~
发表评论
-
rails model best practices
2011-05-11 09:50 0name_scope :active, :conditions ... -
Ruby标准库
2011-05-10 15:02 0ruby标准库一览 文本 base64 yaml ... -
rails3测试理解
2011-04-30 10:23 1350Why RSpec? Clear, concise and ... -
linux系统备注
2011-04-29 10:49 1187bin "Essential binaries&qu ... -
vim备注
2011-04-29 10:03 0vim -
ruby
2011-04-28 10:33 1092Ruby编程基础知识概括: 1. ruby is an ob ... -
Javascript简明手册
2011-04-25 10:07 0Javascript和C++,java,Python一样是一种 ... -
KVM
2011-04-24 09:36 01 kvm安装 前期准备 ... -
Jquery
2011-04-22 16:10 01. jQuery解决了什么样的问题? -
CSS相关知识
2011-04-22 16:02 7391. CSS是一种为结构化文档添加样式的计算机语言 使 ... -
Mysql相关知识
2011-04-22 14:30 11781. Mysql常规使用 安装 server: sudo ... -
PF_RING
2011-04-14 14:38 20741. PF_RING 安装 A clean insta ... -
thrift实践
2011-04-08 11:52 14901 安装thrift 通过svn获得源码 svn co h ... -
Cmake + protobuf-c + python自定义协议通信
2011-03-29 11:25 4825Cmake是一套跨平台的工程构建工具 sudo apt ... -
清除历史记录
2011-03-18 10:40 01. 选型 [语言] C++ [平台] wind ... -
pyzmq 使用
2011-03-16 16:02 51171. The Socket API Creating an ... -
nginx X-Accel-Redirect实现文件下载权限控制及rails devise实现
2011-03-14 13:52 3336问题1:Nginx的X-Accel-Redirect? 答: ... -
fabric自动部署
2011-03-09 14:00 2631Fabric commands run - run a ... -
nagios的工作场景及使用说明
2011-03-08 10:15 2066问题1:nagios配置文件说明? 答: comman ... -
在ubuntu下安装nagios监控平台
2011-03-07 16:56 1600问题1:Nagios是什么? 答:是一个监视系统运行状态和网 ...
相关推荐
- ZeroMQ的介绍和其在消息队列中的地位。 - Python与ZeroMQ的交互,如何用Python编写ZeroMQ程序。 - ZeroMQ的安装和配置,以及获取示例代码的方法。 - 理解ZeroMQ中的字符串处理、版本报告和消息发布等基础知识。 - ...
总结起来,这个压缩包提供的资源是一个全面的Python ZeroMQ教程,涵盖了ZeroMQ的核心概念、多种消息模式以及Python API的使用,对于想要学习或提升ZeroMQ使用技巧的Python开发者来说,是非常宝贵的参考资料。
Python ZeroMQ是一个强大的消息库,它为Python程序员提供了一种高效、灵活的异步消息传递机制。ZeroMQ,也称为0MQ或ZMQ,是一个开源的多协议消息中间件,它模拟了多种通信模式,如发布/订阅、请求/响应、推拉模式等...
在本教程中,我们将重点讨论如何使用Python与ZeroMQ进行通信,并理解其核心概念和模式。 1. **ZeroMQ概述**: 零MQ的核心理念是将网络通信抽象成插座(socket)模型,这使得它易于理解和使用。它支持多种协议,如...
标题中的"ZeroMQ_Server.zip_mt4_python_zeromq_zmq"揭示了我们要讨论的核心内容:使用ZeroMQ库实现MetaTrader 4(MT4)交易平台与Python编程语言之间的通信。ZeroMQ是一个开源的消息中间件,它提供了一种高效、灵活...
在本文中,我们将深入探讨Python实现ZeroMQ的三种基本工作模式。ZeroMQ是一个强大的消息队列库,它提供了一种简单、高效的网络通信机制。它不是传统的消息队列服务器,而是一个封装了Socket API的库,让编程变得更加...
Python-txZMQ是Python开发者用来利用ZeroMQ消息库的一个扩展,它建立在Twisted框架之上,为异步I/O提供了强大的支持。ZeroMQ是一种高效的消息传递库,它提供了多种消息模式,如发布/订阅、请求/响应以及点对点通信,...
Strelka是一款强大的工具,它巧妙地结合了Python编程语言和ZeroMQ(一个消息传递库)的功能,为安全专业人士提供了实时大规模文件扫描的能力。在网络安全领域,这样的系统对于威胁搜索、威胁检测以及事件响应至关...
ZeroMQ的用户手册,适合C++、Java、Go、Python等通过MQ订阅消息的形式进行通信,低延迟,支持多语言SDK;手册内包含了ZeroMQ的基础入门知识,适合新手学习;介绍了ZeroMQ的集中模式包括高级请求-应答模式; 手册目录...
**Python-Pydb:使用ZeroMQ的轻量级数据库与Python语法查询** Pydb是一个创新的轻量级数据库系统,其独特之处在于它利用了ZeroMQ作为通信框架,提供了使用Python语言进行数据查询的可能性。这一设计使得Pydb不仅在...
在“ZeroMQ介绍”文档中,读者可以了解到ZeroMQ的基本概念和设计哲学。ZeroMQ不依赖传统的网络协议栈,而是自定义了一套基于消息的通信协议,这种协议使得它可以在多种传输层协议(如TCP、UDP、PUB/SUB、PAIR等)上...
5. **跨语言**:提供了多种编程语言的API,如C、C++、Python、Java、JavaScript等,便于集成到不同的项目中。 6. **容错**:支持消息持久化和高可用性配置,确保消息的可靠传输。 在Win10上安装并使用MingW编译...
书中的示例代码使用了多种编程语言,如C、C++、Python等,以确保读者可以使用自己熟悉的语言来应用ZeroMQ。 为了帮助读者更好地理解ZeroMQ,作者强调了上下文(Context)的重要性,这是进行消息传递的基础。此外,...
3. **跨平台**:ZeroMQ支持多种编程语言,包括C、C++、Python、Java、Ruby等,可以在Linux、Windows、macOS等操作系统上运行。 4. **模式丰富**:ZeroMQ提供了四种主要的通信模式:PUB/SUB(发布/订阅)、REQ/REP...
ZeroMQ不仅支持多种编程语言(如C,C++,Python,Java等),还提供了高并发、低延迟的通信机制,适用于构建分布式系统、微服务架构等。 **文件名称解析:** "ZeroMQDemo-master"可能是项目源码的主目录,"master...
ZeroMQ支持多种编程语言,包括C、C++、Java、Python等,提供了灵活的开发环境。 使用ZeroMQ的优势 使用ZeroMQ可以提供高性能、可靠的消息传递机制,满足不同的应用场景。使用ZeroMQ可以简化分布式系统中的通信问题...
在实际使用中,开发人员可以使用各种语言的API来与ZeroMQ交互,例如C、C++、Python、Java等。ZeroMQ的强大之处在于它的轻量级、高性能和易于使用,使得开发者能够快速构建高并发、分布式应用。 消息队列是ZeroMQ的...
在使用"zeromq-3.2.3"时,你需要先安装ZeroMQ库,然后根据你的编程语言选择相应的绑定库,如pyzmq(Python)、czmq(C++)等。之后,你可以创建Socket对象并指定其类型,比如创建一个PUB类型的Socket来发布消息,...
zeromq,又称为ZeroMQ或0MQ,是一个开源的消息中间件,它实现了高性能、分布式消息传递模型,支持多种编程语言,如C、C++、Python、Java等。zeromq的设计目标是提供一种轻量级、高效率的消息队列,以解决多进程间...
这里提供的四个压缩包文件,Python-2.6.6.tar.bz2、zeromq-3.2.5.tar.gz、jzmq.tar.gz以及storm-0.8.0.zip,都是与Storm搭建和运行相关的资源。 首先,我们来详细了解一下每个文件的作用: 1. **Python-2.6.6.tar....