首页 > 代码库 > zmq安装与使用

zmq安装与使用

Zmq的安装与使用

花了一下午时间来安装使用zmq,终于将程序调通。记录下安装使用过程及遇到的问题

zmq的安装

安装前准备

在安装zeromq之前需要安装libtool, autoconf, automake, uuid-dev, util-linux

具体指令如下

yum install libtool

yum install autoconf

yum install automake

yum install uuid  uuid-devel

安装util-linux时我直接下载的源码包,

地址:http://mirrors.oss.org.cn/linux_kernel/util-linux/v2.21/util-linux-2.21.1.tar.gz

下载后解压安装

tar zxvf util-linux-2.21.1.tar.gz

cd util-linux-2.21.1

./ configure

make

sudo make install

sudo ldconfig

 

1.2 安装zmq

获得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

make

sudo make install

sudo ldconfig

 

1.3 使用python编程,要安装pyzmq

获得pyzmq的源代码

https://pypi.python.org/packages/source/p/pyzmq/

注意:pyzmq版本要与zeromq版本一致,不然就算安装了pyzmq运行.py脚本时也会报错,我开始时就是遇到了这个问题,报错如下

Traceback (most recent call last):

  File "server.py", line 1, in <module>

    import zmq

  File "/usr/lib64/python2.6/site-packages/zmq/__init__.py", line 26, in <module>

    from zmq.utils import initthreads # initialize threads

ImportError: libzmq.so.0: cannot open shared object file: No such file or directory

 

从字面意思看,是找不到libzmp.so.0文件,查看官方文档,说是因为

I am guessing you are on on Linux. This looks like the error you will see if you don‘t use rpath or set LD_LIBRARY_PATH.

If you install libzmq to a location other than the default (/usr/local) on Linux, you may need to do one of the following:

·     Set LD_LIBRARY_PATH to point to the lib directory of ?MQ.

·     Build the extension using the --rpath flag:

$ python setup.py build_ext --rpath=/opt/zeromq-dev/lib

于是按照以下方式设置LD_LIBRARY_PATH

[moqian.ydd@r10g04458.sqa.zmf /home/moqian.ydd/tools]

$cd /

vi ~/.bash_profile

添加:

LD_LIBRARY_PATH=/usr/local/lib

export LD_LIBRARY_PATH

即:

PATH=$PATH:$HOME/bin

LD_LIBRARY_PATH=/usr/local/lib

export PATH

export LD_LIBRARY_PATH

然后运行

$ source ~/.bash_profile

设置后,再运行.py脚本,还是报上面的错误。于是重新安装pyzmq的最新版本,问题得到解决

举例

采用zmqrequest/reply模式,使用TCP协议

Client端代码

 

import zmq

context=zmq.Context()

print "connect to server"

socket=context.socket(zmq.REQ)

socket.connect("tcp://localhost:555")

 

for request in range(1,10):

    print "send message ",request,"...."

    socket.send("hello")

    message=socket.recv()

    print "receive reply ",request,"[",message,"]"

 

Server端代码

import zmq

import time

 

context=zmq.Context()

socket=context.socket(zmq.REP)

socket.bind("tcp://*:555")

 

while True:

    message=socket.recv()

    print "receive request:",message

    time.sleep(1)

    print "do some work"

    socket.send("i am work!")

开两个客户端,先启动server端脚本,然后启动client端脚本,方式如下

sudo pyton server.py

sudo python client.py

Client端运行结果

connect to server

send message  1 ....

receive reply  1 [ i am work! ]

send message  2 ....

receive reply  2 [ i am work! ]

send message  3 ....

receive reply  3 [ i am work! ]

send message  4 ....

receive reply  4 [ i am work! ]

send message  5 ....

receive reply  5 [ i am work! ]

send message  6 ....

receive reply  6 [ i am work! ]

send message  7 ....

receive reply  7 [ i am work! ]

send message  8 ....

receive reply  8 [ i am work! ]

send message  9 ....

receive reply  9 [ i am work! ]

 

Server端运行结果如下


receive request: hello

do some work

receive request: hello

do some work

receive request: hello

do some work

receive request: hello

do some work

receive request: hello

do some work

receive request: hello

do some work

receive request: hello

do some work

receive request: hello

do some work

receive request: hello

do some work

 

zmq安装与使用