当前位置: 代码迷 >> 综合 >> 13-0001 ZMQ下载及使用
  详细解决方案

13-0001 ZMQ下载及使用

热度:60   发布时间:2023-11-24 01:49:34.0

ZMQ的下载及使用

  • 0.简介
  • 1.下载
    • 1.1 C语言:libzmq
    • 1.2 C++:cppzmq
  • 2.编译
    • 2.1 安装Cmake
    • 2.2 编译
  • 3.使用
    • 3.1 文件说明
    • 3.2 工程中使用
    • 3.3 代码示例
    • 3.4 C++使用

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()
{
    //servervoid* 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++) {
    //sendstd::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.