概述
ZMQ安装和使用
ZMQ 并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,它更像是一个底层的网络通讯库,在 Socket API 之上做了一层封装,将网络通讯、进程通讯和线程通讯抽象为统一的 API 接口
跟 Socket 的区别是:普通的 socket 是端到端的(1:1的关系),而 ZMQ 却是可以N:M 的关系,人们对 BSD 套接字的了解较多的是点对点的连接,点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等,而 ZMQ 屏蔽了这些细节,让你的网络编程更为简单。ZMQ 用于 node 与 node 间的通信,node 可以是主机或者是进程。
ZMQ 提供了三个基本的通信模型,分别是“Request-Reply “,”Publisher-Subscriber“,”Parallel Pipeline”,具体内容参见http://news.cnblogs.com/n/154000/
区别:
1、zmq套接字是异步的,可以实现特定模式
2、TCP是一对一,ZeroMQ是多对多的,可以根据套接字类型实现一对多,一对一,多对一,或多对多
3、ZeroMQ传输消息,TCP传输字节
4、ZeroMQ 隐藏IO细节,ZeroMQ不在乎目的是否存在
5、ZeroMQ可以往多个节点发送数据,可以从多个节点接收数据
一、安装
在ubuntu上安装并测试成功,过程见下:
(2)解压:tar -xvf zeromq-4.1.2.tar.gz
(3)编译
./configure 提示
checking forsodium... no
configure: error: Package requirements (libsodium) were not met
解决办法,暂时先屏蔽掉这个库:
./configure --prefix=/home/libdev/zmq --without-libsodium //红色部分路径可以去掉
make
make install
安装成功。
二、测试程序
server端:
#include #include#include#include#include
int main (void)
{//Socket to talk to clients
void *context =zmq_ctx_new ();void *responder =zmq_socket (context, ZMQ_REP);int rc = zmq_bind (responder, "tcp://*:5555");
assert (rc== 0);while (1) {char buffer [10];
zmq_recv (responder, buffer,10, 0);
printf ("Received Hellon");
sleep (1); //Do some 'work'
zmq_send (responder, "World", 5, 0);
}return 0;
}
client端:
//Hello World client
#include #include#include#include
int main (void)
{
printf ("Connecting to hello world server…n");/*创建一个新的上下文*/
void *context =zmq_ctx_new ();void *requester =zmq_socket (context, ZMQ_REQ);/*通过tcp协议,5555端口,连接本机服务端*/zmq_connect (requester,"tcp://localhost:5555");intrequest_nbr;for (request_nbr = 0; request_nbr != 10; request_nbr++) {char buffer [10];
printf ("Sending Hello %d…n", request_nbr);
zmq_send (requester,"Hello", 5, 0);
zmq_recv (requester, buffer,10, 0);
printf ("Received World %dn", request_nbr);
}
zmq_close (requester);
zmq_ctx_destroy (context);return 0;
}
编译:注意加上动态库
gcc hwserver_.c -o hwserver -lzmq
gcc hwclient_.c-o hwclient -lzmp
运行:出现如下错误
[root@localhost hwserver]# ./hwserver
./hwserver: error while loading shared libraries: libzmq.so.5: cannot open shared object file: No such file or directory
解决办法:加上zmq.so的路径:
sudo find ./ -depth -name "libzmq.so" -print //找出动态库路径
cd/etc
sudo vim ld.so.conf//include /usr/local/lib //把zmq.so的路径加进来
ldconfig //记住执行这句话
然后启动hwserver和hwclient,执行结果如下所示:
参考:http://www.cnblogs.com/Anker/p/4706244.html
最后
以上就是如意口红为你收集整理的zmq是基于tcp实现的吗_网络通信 --> ZMQ安装和使用的全部内容,希望文章能够帮你解决zmq是基于tcp实现的吗_网络通信 --> ZMQ安装和使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复