02_c/c++开源库ZeroMQ

1.安装

C库 libzmq

sudo apt install libzmq3-dev
实例: https://zeromq.org/get-started/?language=c&library=libzmq#

编译依赖:
pkg-config --cflags --libs libzmq or cat /usr/lib/x86_64-linux-gnu/pkgconfig/libzmq.pc

-isystem /usr/include/mit-krb5 -I/usr/include/pgm-5.2 -lzmq

只使用ZMQ基本功能, 添加链接选项 -lzmq 即可
编译选项: 无
链接选项: -lzmqpp


C++库 libzmqpp

sudo apt install libzmqpp-dev
实例: https://zeromq.org/get-started/?language=cpp&library=zmqpp#

编译依赖

  1. 不支持.pc 格式查看
  2. 通过安装位置, 可知头文件,动态库位置

/usr/include/zmqpp/zmqpp.hpp
/usr/lib/x86_64-linux-gnu/libzmqpp.so

编译选项: 无
链接选项: -lzmqpp

2.实例

1.代码

1_zmqpp_sub订阅端.cc

#include <iostream>
#include <string>
#include <zmqpp/zmqpp.hpp>
using namespace std;
int main(int argc, char *argv[])
{
    zmqpp::context context;
    const string addr_port = "tcp://localhost:5555";
    zmqpp::socket_type type = zmqpp::socket_type::subscribe;
    zmqpp::socket socket = zmqpp::socket(context, type);
    socket.set(zmqpp::socket_option::subscribe, "");
    socket.connect(addr_port);
    while (1)
    {
        zmqpp::message message;
        socket.receive(message);
        std::cout << "recv data: " << message.get(0) << std::endl;
    }
    return 0;
}

2_zmqpp_pub发布端.cc

#include <iostream>
#include <string>
#include <zmqpp/zmqpp.hpp>
#include <unistd.h>
using namespace std;
int main()
{
    zmqpp::context context;
    const string addr_port = "tcp://*:5555";
    zmqpp::socket_type type = zmqpp::socket_type::publish;
    zmqpp::socket socket = zmqpp::socket(context, type);
    socket.bind(addr_port);
    int i = 0;
    while (i < 100)
    {
        zmqpp::message message;
        message << "test[" + to_string(i++) + "]";
        socket.send(message);
        sleep(1);
    }
    return 0;
}

2.scons构建

SConstruct

## 模板2
env = Environment()
env["PROGSUFFIX"] = ".out"            # 可执行后缀.out
env["CCFLAGS"] = " -g3 -O0 -Wall"  # gdb 调试开关
env["LIBS"]=["zmqpp","zmq","protobuf"]
env.Program("1_zmqpp_sub订阅端.cc")
env.Program("2_zmqpp_pub发布端.cc")

scons

scons: Reading SConscript files …
scons: done reading SConscript files.
scons: Building targets …
g++ -o 1_zmqpp_sub订阅端.o -c -ggdb3 -O0 -Wall 1_zmqpp_sub订阅端.cc
g++ -o 1_zmqpp_sub订阅端.out 1_zmqpp_sub订阅端.o -lzmqpp -lzmq -lprotobuf
g++ -o 2_zmqpp_pub发布端.o -c -ggdb3 -O0 -Wall 2_zmqpp_pub发布端.cc
g++ -o 2_zmqpp_pub发布端.out 2_zmqpp_pub发布端.o -lzmqpp -lzmq -lprotobuf
scons: done building targets.

3.运行

终端1: ./1_zmqpp_sub订阅端.out
终端2: ./2_zmqpp_pub发布端.out
效果如下图
在这里插入图片描述

1.安装

C库 libzmq

sudo apt install libzmq3-dev
实例: https://zeromq.org/get-started/?language=c&library=libzmq#

编译依赖:
pkg-config --cflags --libs libzmq or cat /usr/lib/x86_64-linux-gnu/pkgconfig/libzmq.pc

-isystem /usr/include/mit-krb5 -I/usr/include/pgm-5.2 -lzmq

只使用ZMQ基本功能, 添加链接选项 -lzmq 即可
编译选项: 无
链接选项: -lzmqpp


C++库 libzmqpp

sudo apt install libzmqpp-dev
实例: https://zeromq.org/get-started/?language=cpp&library=zmqpp#

编译依赖

  1. 不支持.pc 格式查看
  2. 通过安装位置, 可知头文件,动态库位置

/usr/include/zmqpp/zmqpp.hpp
/usr/lib/x86_64-linux-gnu/libzmqpp.so

编译选项: 无
链接选项: -lzmqpp

2.实例

1.代码

1_zmqpp_sub订阅端.cc

#include <iostream>
#include <string>
#include <zmqpp/zmqpp.hpp>
using namespace std;
int main(int argc, char *argv[])
{
    zmqpp::context context;
    const string addr_port = "tcp://localhost:5555";
    zmqpp::socket_type type = zmqpp::socket_type::subscribe;
    zmqpp::socket socket = zmqpp::socket(context, type);
    socket.set(zmqpp::socket_option::subscribe, "");
    socket.connect(addr_port);
    while (1)
    {
        zmqpp::message message;
        socket.receive(message);
        std::cout << "recv data: " << message.get(0) << std::endl;
    }
    return 0;
}

2_zmqpp_pub发布端.cc

#include <iostream>
#include <string>
#include <zmqpp/zmqpp.hpp>
#include <unistd.h>
using namespace std;
int main()
{
    zmqpp::context context;
    const string addr_port = "tcp://*:5555";
    zmqpp::socket_type type = zmqpp::socket_type::publish;
    zmqpp::socket socket = zmqpp::socket(context, type);
    socket.bind(addr_port);
    int i = 0;
    while (i < 100)
    {
        zmqpp::message message;
        message << "test[" + to_string(i++) + "]";
        socket.send(message);
        sleep(1);
    }
    return 0;
}

2.scons构建

SConstruct

## 模板2
env = Environment()
env["PROGSUFFIX"] = ".out"            # 可执行后缀.out
env["CCFLAGS"] = " -g3 -O0 -Wall"  # gdb 调试开关
env["LIBS"]=["zmqpp","zmq","protobuf"]
env.Program("1_zmqpp_sub订阅端.cc")
env.Program("2_zmqpp_pub发布端.cc")

scons

scons: Reading SConscript files …
scons: done reading SConscript files.
scons: Building targets …
g++ -o 1_zmqpp_sub订阅端.o -c -ggdb3 -O0 -Wall 1_zmqpp_sub订阅端.cc
g++ -o 1_zmqpp_sub订阅端.out 1_zmqpp_sub订阅端.o -lzmqpp -lzmq -lprotobuf
g++ -o 2_zmqpp_pub发布端.o -c -ggdb3 -O0 -Wall 2_zmqpp_pub发布端.cc
g++ -o 2_zmqpp_pub发布端.out 2_zmqpp_pub发布端.o -lzmqpp -lzmq -lprotobuf
scons: done building targets.

3.运行

终端1: ./1_zmqpp_sub订阅端.out
终端2: ./2_zmqpp_pub发布端.out
效果如下图
![[Pasted image 20240423180836.png]]

3.其它用法实例

zmq实例: gitee 网页在线代码
git clone下载代码, 切换到对应的工作目录, 安装对应的库之后,运行scons即可编译, 运行

zmq传输结构体实例

7_zmq_server_发送接受_结构体.c
8_zmq_client_发送接受_结构体.c

zmq传输protobuf 序列化实例

3_zmqpp_server.cc message.pb.cc
4_zmqpp_client.cc message.pb.cc

c++库zmqpp实例

11_zmqpp_请求_应答_server.cc
12_zmqpp_请求_应答_client.cc
13_zmqpp_推送_拉取_pusher.cc
14_zmqpp_推送_拉取_puller.cc
15_zmqpp_进场间通信_sender.cc
16_zmqpp_进场间通信_receiver.cc


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/576208.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Android]引导页

使用Kotlin Jetpack Compose创建一个左右滑动的引导页, 效果如图. 1.添加依赖项 androidx.compose.ui最新版本查询:https://maven.google.com/web/index.html com.google.accompanist:accompanist-pager最新版本查询:https://central.sonatype.com/ 确保在 build.gradle (M…

无人机+集群组网:机载自组网电台技术详解

无人机与集群组网的结合为现代通信带来了独特的优势。在集群组网中&#xff0c;每个节点&#xff08;例如无人机&#xff09;都兼具路由器和主机的功能&#xff0c;它们不仅可以运行各种面向用户的应用程序&#xff0c;还可以执行路由协议&#xff0c;根据路由策略和路由表完成…

基于SpringBoot + Vue实现的校园(通知、投票)管理系统设计与实现+毕业论文(12000字)+答辩PPT+指导搭建视频

目录 项目介绍 运行环境 技术栈 效果展示 论文展示 总结 项目介绍 本系统包含管理员、用户、院校管理员三个角色。 管理员角色&#xff1a;用户管理、院校管理、单位类别管理、院校管理员管理、单位管理、通知推送管理、投票信息管理、通知回复管理等。 用户角色&#…

2款README.md生成器

&#x1f3f7;️ readme-md-generator 确保你已经安装了npx (npx从npm 5.2.0开始默认安装) 执行命令 只需在项目的根目录下运行以下命令并回答问题: npx readme-md-generator 在项目根目录执行上面bash命令&#xff0c;结果&#xff1a; # npx readme-md-generator D:\vinc…

上新啦!讯飞首个支持长文本、长图文、长语音的大模型发布

IDC预测&#xff0c;全球数据信息产生和复制量将在2025年达到175ZB&#xff08;1ZB相当于1万亿GB&#xff09;。假设每个人的大脑功能记忆容量约为1.25TB&#xff0c;那么需要超过280亿个人脑来处理这些信息&#xff0c;相当于全球人口的4倍。 4月26日&#xff0c;讯飞星火V3.…

安卓NetworkStatsManager使用及demo

目录 一、TrafficStats类简介二、demo示例 一、TrafficStats类简介 TrafficStats Android API 8提供了android.net.TrafficStats类。 通过此类能获取设备重启以来网络信息&#xff0c;部分函数如下所示&#xff1a; static long getMobileRxBytes() //获取通过移动数据网络…

[C++]STL---unordered_set与unordered_map的模拟实现

目录 前言 哈希桶的改造 哈希桶的初步改造 迭代器的模拟实现 operator() 类互相typedef时的前置声明 友元声明 迭代器的出口 插入Insert() 查找Find(&#xff09; 哈希表的最终改造 unordered_set的模拟实现 unordered_map的模拟实现 前言 unordered_set与set的区…

嵌入式系统中的实时操作系统(RTOS)深入应用与优化

引言 实时操作系统&#xff08;RTOS&#xff09;在嵌入式系统中扮演着至关重要的角色&#xff0c;特别是在需要快速响应和高度可靠性的应用中。 我将探讨如何在STM32单片机上实现RTOS&#xff0c;包括任务管理、内存管理以及中断处理&#xff0c;以提高系统的效率和响应速度。…

C++:const成员和取地址操作符

目录 一、const成员 二、取地址及const取地址操作符重载 一、const成员 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数 隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何成员进行修改。 注&…

JavaScript+B/S架构云LIS系统源码C# 6.0+MVC+SQLSugar医院版检验科云LIS系统源码 可提供演示

JavaScriptB/S架构云LIS系统源码MVCSQLSugar医院版检验科云LIS系统源码 可提供演示随着医疗技术的不断发展&#xff0c;医疗机构对于信息化、智能化的需求也越来越高。特别是对于检验科这样的核心科室&#xff0c;如何提高工作效率、降低误差率、提高数据安全性成为了亟待解决的…

2024年【安全生产监管人员】考试技巧及安全生产监管人员模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【安全生产监管人员】考试技巧及安全生产监管人员模拟考试&#xff0c;包含安全生产监管人员考试技巧答案和解析及安全生产监管人员模拟考试练习。安全生产模拟考试一点通结合国家安全生产监管人员考试最新大纲…

Type-C接口取电IC6500:优势与应用场景的深度解析

Type-C接口PD芯片取电IC的优势 随着科技的不断进步和移动设备在日常生活中的广泛应用&#xff0c;充电技术的革新变得愈发重要。Type-C接口PD芯片取电IC作为现代充电技术的关键组件&#xff0c;其优势日益凸显&#xff0c;为移动设备充电带来了革命性的改变。本文将深入探讨Ty…

(三)登录和注册(handle_auto.go)

登录和注册(handle_auto.go) 文章目录 登录和注册(handle_auto.go)一、所需要的结构体信息二、注册三、登录四、退出 一、所需要的结构体信息 type UserAuth struct{}type LoginReq struct {Username string json:"username" binding:"required"Password …

【汇编语言】直接定址表

【汇编语言】直接定址表 文章目录 【汇编语言】直接定址表前言一、移位指令移位指令过程逻辑移位指令shl 和 shr 二、操作显存数据显示的原理显示缓冲区的结构显示信息的一种“直接”方式 三、描述内存单元的标号关于标号去了冒号的数据标号数据标号同时描述内存地址和单元长度…

前端JS必用工具【js-tool-big-box】,防抖和节流的方法调用学习

这一小节&#xff0c;我们针对前端工具包&#xff08;npm&#xff09;js-tool-big-box的使用做一些讲解&#xff0c;主要是防抖和节流方面的。 目录 前言 1 安装和引入 2 防抖的调用学习 3 节流的调用学习 4 使用方法总结 前言 在前端项目中&#xff0c;经常涉及到防抖…

CNAS软件测评报告收费标准

随着信息技术的快速发展&#xff0c;软件测评在保障软件质量、提升用户体验等方面扮演着越来越重要的角色。CNAS&#xff08;中国合格评定国家认可委员会&#xff09;作为国内权威的认可机构&#xff0c;其软件测评报告收费标准受到了广泛关注。本文旨在解析CNAS软件测评报告的…

[华为OD]幼儿园两个班的小朋友 100

题目&#xff1a; 幼儿园两个班的小朋友在排队时混在了一起&#xff0c;每位小朋友都知道自己是否与前面一位小朋友 是否同班&#xff0c;请你帮忙把同班的小朋友找出来。 小朋友的编号为整数&#xff0c;与前一位小朋友同班用 Y 表示&#xff0c;不同班用 N 表示。 输入描…

索引【MySQL】

文章目录 什么是索引测试表 磁盘和 MySQL 的交互了解磁盘MySQL 的工作原理Buffer Pool 理解索引引入Page 的结构页内目录&#xff08;Page Directory&#xff09;多页情况B 树和 B树聚簇索引和非聚簇索引 主键索引创建 唯一索引主要特点与主键索引的区别使用场景创建 联合索引工…

思维+数学期望,CF 1525E Assimilation IV

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1525E - Codeforces 二、解题报告 1、思路分析 看数据量盲猜O(…

树的层序遍历(详解)

下面以一道力扣题为例&#xff1a; 代码和解释如下&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(…