ZeroMQ的编译安装和使用实例

本文介绍了如何在Linux环境中编译安装ZeroMQ及其依赖的Sodium库,详细步骤包括下载源码、配置和安装。接着展示了ZeroMQ的一个简单使用示例,通过一个客户端和一个服务端的程序,演示了使用REQ-REP套接字进行HelloWorld通信的过程。客户端发送Hello,服务端响应World,遵循特定的消息发送和接收顺序。
摘要由CSDN通过智能技术生成


一、编译安装

1.1 资料网址


ZeroMQ官方文档网址:http://zguide.zeromq.org/page:all

源码下载地址:http://download.zeromq.org/

1.2 安装必须的库

$ sudo apt-get install libtool
$ sudo apt-get install pkg-config
$ sudo apt-get install build-essential
$ sudo apt-get install autoconf
$ sudo apt-get install automake

1.3 安装加密库


Sodium一个易于使⽤的可为我们提供加密、解密、签名,密码哈希等功能的软件库。除了自身强大的功能
外,它还为我们提供了一个兼容API和一个外部API,以进一步的帮助我们提高其可行性。Sodium的目标
是提供构建更高级别加密工具所需的所有核心操作。

$ git clone git://github.com/jedisct1/libsodium.git
$ cd libsodium
$ ./autogen.sh -s
$ ./configure && make check
$ sudo make install
$ sudo ldconfig
$ cd ..

1.4 下载、编译、安装libzmq

# 下载
$ git clone https://github.com/zeromq/libzmq.git
$ cd libzmq

#查看tag
$ git tag

# 版本 获取指定的版本,不要用主分支,可能有bug
$ git checkout v4.3.2
$ ./autogen.sh
$ ./configure && make check
$ sudo make install
$ sudo ldconfig
$ cd ..

sudo make install后可以看到具体的.so和.a.
libtool: install: /usr/bin/install -c src/.libs/libzmq.lai /usr/local/lib/libzmq.la
libtool: install: /usr/bin/install -c src/.libs/libzmq.a /usr/local/lib/libzmq.a
libtool: install: chmod 644 /usr/local/lib/libzmq.a
libtool: install: ranlib /usr/local/lib/libzmq.a
libtool: finish:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/sbin" ldconfig -n /usr/local/lib


二、使用实例


实例功能说明:一个客户端一个服务端,客户端发送Hello给服务端,服务端返回World。
在这里插入图片描述

2.1 服务端源码 server.c

// Hello World 服务端
// 绑定⼀个REP套接字⾄tcp://*:5555
// 从客户端接收Hello,并应答World
 //

#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
 #include <string.h>
 #include <assert.h>
 // gcc -o hwserver hwserver.c -lzmq
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 ("收到 Hello\n");
		 sleep (1); // Do some 'work'
		 
		 // 返回应答
		 zmq_send (responder, "World", 5, 0);
	 }
	 return 0;
 }


2.2 客户端源码 client.c

// 连接REQ套接字⾄ tcp://localhost:5555
 // 发送Hello给服务端,并接收World
//
// Hello World client
#include <zmq.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
//编译:gcc -o hwclient hwclient.c -lzmq
int main (void)
{
	 printf ("Connecting to hello world server...\n");
	 void *context = zmq_ctx_new ();
	// 连接⾄服务端的套接字
	 void *requester = zmq_socket (context, ZMQ_REQ);
	zmq_connect (requester, "tcp://localhost:5555");
	
	 int request_nbr;
	 for (request_nbr = 0; request_nbr != 10; request_nbr++) 
	 {
		 char buffer [10];
		 printf ("正在发送 Hello %d...\n", request_nbr);
		 zmq_send (requester, "Hello", 5, 0);
		 zmq_recv (requester, buffer, 10, 0);
		 printf ("接收到 World %d\n", request_nbr);
	}
	 zmq_close (requester);
	 zmq_ctx_destroy (context);
	 return 0;
 }


编译:

gcc -o server server.c -lzmq
gcc -o clientclient.c -lzmq


使用REQ-REP套接字发送和接受消息是需要遵循一定规律的。客户端首先使用zmq_send()发送消息,再用zmq_recv()接收,如此循环。如果打乱了这个顺序(如连续发送两次)则会报错。类似地,服务端必须先进行接收,后进行发送。

先运行服务端,再运行客户端。

运行结果:

//服务端
$ ./server
 收到 Hello
 收到 Hello
 收到 Hello
 收到 Hello
 收到 Hello
 收到 Hello
//客户端
$ ./client
 正在发送 Hello 0...
 接收到 World 0
 正在发送 Hello 1...
 接收到 World 1
 正在发送 Hello 2...
 接收到 World 2
 正在发送 Hello 3...
 接收到 World 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值