13-0001 ZMQ下载及使用

0.简介

网上简介一大堆,个人而言也没怎么看,工作要用,就需要学习。
ZMQ、ZeroMQ:能够快速建立SOCKET,有多种模式可供使用,最开始接触的时候使用的是PUB-SUB模式。

1.下载

工程链接:The ZeroMQ project

1.1 C语言:libzmq

libzmq
下载源码
在这里插入图片描述
直接从当前页面即可下载,如果想下载其他的版本,可以查看各个Release版本,分别下载资源。下载解压后的文件,如下图所示:
在这里插入图片描述
备注:

  • doc:文档
  • include:头文件
  • src:源文件
  • 其他:不知道

1.2 C++:cppzmq

cppzmq
备注:相关的操作与C++的一致


2.编译

2.1 安装Cmake

编译需要使用CMake,如果没有安装,需要手动安装一下。
CMake下载:Cmake Download
在这里插入图片描述

备注:安装相关注意事项,直接百度即可。

安装结果,如下图所示:[命令行不会使用,需要使用gui界面的程序]
在这里插入图片描述

2.2 编译

1、打开cmake-gui.exe,选择工程路径以及构建路径

  • 工程路径:含有MakeFileList.txt文件的上级文件夹
  • 构建路径:输出目录
    在这里插入图片描述
    2、Configure
    在这里插入图片描述
    点击之后,选择相应的构建环境:
    在这里插入图片描述
    选择完成之后,直接finish即可,自动执行configure的过程。

3、Generate
在这里插入图片描述
执行generate之后,将会构建工程,工程构建完毕,open project可用:
在这里插入图片描述
4、编译工程
open project,打开VS2019,工程较多,需要稍等片刻:
在这里插入图片描述
ALL_BUILD工程,右键生成即可。
备注:如果需要Win32版本,直接工程中间修改即可
在这里插入图片描述

感觉其中有很多都是测试工程,实际常最后使用的只有一个动态库,以及一个hpp文件
在这里插入图片描述

3.使用

3.1 文件说明

使用ZMQ的时候,只需要使用其中的部分文件:
ZMQ源工程目录下:
在这里插入图片描述
备注:需要将platform.hpp文件拷贝到src下面,具体路径如下:

copy "\ZMQ\build_4.3.4\platform.hpp" to "\ZMQ\zeromq-4.3.4\src"

ZMQ构建目录下:
在这里插入图片描述
具体使用的文件如下:

- bin
	- Debug
		- libzmq-v142-mt-gd-4_3_4.dll
- lib
	- Debug
    	- libzmq-v142-mt-gd-4_3_4.lib
    	- libzmq-v142-mt-sgd-4_3_4.lib

3.2 工程中使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
备注:这个lib是两个lib中比较小的那个。

3.3 代码示例

Server

// ZMQ_Test1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

#include <iostream>
#include <stdio.h>
#include "zmq.h"
#include <string>
//#include "zmq.hpp"
using namespace std;

int main()
{
    //server
    void* context = zmq_init(1);
	
    //  与客户端通信的套接字
    void* responder = zmq_socket(context, ZMQ_REP);
    zmq_bind(responder, "tcp://*:5555");

    while (1) {
        //  等待客户端请求
        zmq_msg_t request;
        zmq_msg_init(&request);
        zmq_msg_recv(&request, responder, 0);
        printf("%s\n", (char*)zmq_msg_data(&request));
        zmq_msg_close(&request);

        //  返回应答
        int rCount = 0;
        while (rCount < 3) {
            ++rCount;
			printf("我:");
			std::string outStr;
			getline(cin, outStr);
			std::string replyStr = "客服:" + outStr;
			int strSize = replyStr.size();
			zmq_msg_t reply;
			zmq_msg_init_size(&reply, strSize + 1);
			memcpy(zmq_msg_data(&reply), replyStr.c_str(), strSize + 1);
            
            if (rCount == 3) {
                zmq_msg_send(&reply, responder, 0);
            }
            else {
                zmq_msg_send(&reply, responder, ZMQ_SNDMORE);
            }
            zmq_msg_close(&reply);
        }
        
    }
    //  程序不会运行到这里,以下只是演示我们应该如何结束
    zmq_close(responder);
    zmq_term(context);
    return 0;
}


Client

// ZMQ_Test2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include "zmq.h"
#include <string>
using namespace std;

int main()
{
	std::string userName="DefaultName";

	void* context = zmq_init(1);
	// 连接至服务端的套接字

	printf("请输入地址[格式:tcp://255.255.255.255:5555]: ");
	std::string address;
	cin >> address;
	cin.get();
	printf("正在连接至hello world服务端...%s\n",address.c_str());
	void* requester = zmq_socket(context, ZMQ_REQ);
	int res=zmq_connect(requester, address.c_str());

	printf("请输入昵称:");
	getline(cin, userName);
	if (userName.empty()) {
		userName = "DN";
	}

	int request_nbr;
	for (request_nbr = 0; request_nbr != 10; request_nbr++) {
		//send
		std::string inStr;
		printf("我:");
		getline(cin, inStr);
		
		std::string sendStr = userName + ":" + inStr;
		int strSize = sendStr.size();
		zmq_msg_t request;
		zmq_msg_init_size(&request, strSize+1);
		memcpy(zmq_msg_data(&request),sendStr.c_str(), strSize+1);
		int res=zmq_msg_send(&request, requester, 0);
		//printf("res=%d\n", res);
		zmq_msg_close(&request);

		for (int i = 0; i < 3; i++) {
			zmq_msg_t reply;
			zmq_msg_init(&reply);
			zmq_msg_recv(&reply, requester, 0);
			printf("%s\n", (char*)zmq_msg_data(&reply));
			zmq_msg_close(&reply);
		}
	}
	zmq_close(requester);
	zmq_term(context);
	return 0;
}

3.4 C++使用

  1. C++完全兼容C的语法,可以直接使用libzmq的相关库,直接使用C的语法;
  2. 如果需要使用C++语法,则可直接去cppzmq的仓库,下载最新的zmq.hpp文件,添加到工程中即可;

Note that for using cppzmq, you don’t have to build it at all, it is a header only library. You need a libzmq library (static or shared) for your platform, and link it into your application/library, as described with libzmq itself. Then, you only need to #include “zmq.hpp” (and maybe #include “zmq_addon.hpp”) to use cppzmq.
If you want to develop cppzmq itself and run its tests, please provide details on your environment, in particular the OS, how/where you installed libzmq, and how you ran cmake.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值