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.mzph.cn/web/3765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DSNeRF复现流程

创建虚拟环境安装依赖 conda create -n DSNeRF python3.7pip install -r requirements.txt下载LLFF数据放在创建的data文件下 https://drive.google.com/file/d/1RjhfcbsywOvw0ts1AFSri91mKANvEVOa/view?uspsharing 下载预先训练好的模型 bash download_models.sh渲染视频…

【Linux】进程间通信(共享内存、消息队列、信号量)

一、System V —— 共享内存&#xff08;详解&#xff09; 共享内存区是最快的 IPC 形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说&#xff0c;就是进程不再通过执行进入内核的系统调用来传递彼此的数…

C# WinForm —— 10 单选按钮与复选框的介绍与使用

单选按钮 RadioButton 一组单选按钮中&#xff0c;只能选择一个&#xff0c;互相排斥 常用属性、事件&#xff1a; 属性用途(Name)单选按钮的ID&#xff0c;在代码里引用的时候会用到,一般以 rb开头Text单选按钮旁边显示的 文本信息Checked单选按钮的勾选状态Appearance控制单…

【JavaScript】内置对象 ④ ( Math 内置对象常用方法 | 取绝对值 | 向下取整 | 向上取整 | 四舍五入取整 | 取随机数 )

文章目录 一、Math 内置对象常用方法1、计算绝对值 - Math.abs2、取整计算 - Math.floor 向下取整 / Math.ceil 向上取整 / Math.round 四舍五入3、随机数 - Math.random4、代码示例 - 猜随机数 一、Math 内置对象常用方法 1、计算绝对值 - Math.abs 向 Math.abs() 方法中 传入…

报错:测试报错postman(测试接口)

报错如下 c.e.exception.GlobalExceptionHandler : 异常信息&#xff1a; Content type multipart/form-data;boundary--------------------------952399813172082093419475;charsetUTF-8 not supported 解决&#xff1a; 异常信息 Content type multipart/form-data;boundary…

力扣-1832.判断句子是否全为字母句

思路: 首先&#xff0c;我们初始化了一个长度为 26 的布尔值列表 exist&#xff0c;所有值都为 False&#xff0c;表示所有字母初始都未出现过。然后&#xff0c;我们遍历输入的字符串 sentence 中的每个字符。对于每个字符&#xff0c;我们通过计算其 ASCII 码值减去字母 a 的…

Ansible 清单描述

系统&#xff1a;CentOS Linux release 7.9.2009 (Core) 安装Ansible : yum -y install epel-release yum -y install ansible 可以使用多种格式之一创建库存文件&#xff0c;最常见的格式是 INI 和 YAML。默认的INI文件在 /etc/ansible/hosts 清单的基础知识&#xff1a;格式…

深度学习从入门到精通—Transformer

1.绪论介绍 1.1 传统的RNN网络 传统的RNN&#xff08;递归神经网络&#xff09;主要存在以下几个问题&#xff1a; 梯度消失和梯度爆炸&#xff1a;这是RNN最主要的问题。由于序列的长距离依赖&#xff0c;当错误通过层传播时&#xff0c;梯度可以变得非常小&#xff08;消失…

【产品经理修炼之道】- 需求挖掘之手机话费充值

画原型图从来就不是面试考察的重点&#xff0c;分析、解决问题才是产品经理的核心能力。那么该如何积累产品经验呢&#xff1f;本文以以「手机话费充值」为案例&#xff0c;分享整个设计流程和思路&#xff0c;希望对你有所启发。 不少产品新人有个误区&#xff1a;产品经理的日…

C#带引导窗体的窗体设计方法:创建特殊窗体

目录 1.设计操作流程 2.实例 &#xff08;1&#xff09;Resources.Designer.cs &#xff08;2&#xff09;Frm_Main.Designer.cs &#xff08;3&#xff09;Frm_Main.cs &#xff08;4&#xff09;Frm_Start.Designer.cs &#xff08;5&#xff09;Frm_Start.cs &#…

机器学习-多重共线性是什么 ? 如何解决多重共线性问题 ?

多重共线性是指在回归模型中&#xff0c;自变量之间存在高度线性相关或近似线性相关的情况。这种相关性可能导致以下问题&#xff1a; 不稳定的估计&#xff1a;当自变量之间存在多重共线性时&#xff0c;回归模型中的系数估计会变得不稳定。小的变动或微小的误差可能导致估计…

redis试题按知识点归类

Redis 面试题可以按照不同的知识点进行分类&#xff0c;以下是一些典型的分类方式以及每个分类下的样例题目&#xff1a; 基础理论 什么是 Redis&#xff1f;Redis 的数据存储在哪里&#xff1f;Redis 支持哪些数据结构&#xff1f; 数据类型与操作 如何使用 Redis 的字符串…

系统之间的一致性问题 -- 支付成功显示未支付

系统之间的一致性问题 – 支付成功显示未支付&#xff1a; 接入第三方系统的支付接口&#xff0c;支付成功后&#xff0c;却显示未支付。 这种一般是系统之间的状态不一致导致的。 问题分析&#xff1a; 先查看第三方系统的支付状态。 如果第三方系统的支付状态也是未支付…

调用另一个程序的数据 IMPORT EXPORT MEMORY ID

*字段介绍&#xff1a; *1.SELNAME 屏幕字段名 *2.KIND 参数类型 P PARAMETER S SELECT-OPTION *3.其他的字段和SELECT-OPTION 一样 SUBMIT xxx VIA SELECTION-SCREEN "要不要显示选择屏幕 WITH SELECTION-TABLE xxx "选择屏幕的值 AND RETURN . 利用SUBMIT XXX …

模拟信号的离散化

本文介绍模拟信号的离散化。 1.采样定理 定义&#xff1a;若想重建输入的模拟信号&#xff0c;采样频率必须大于等于输入模拟信号最高频率的2倍&#xff0c;即&#xff1a; 其中&#xff0c;为采样频率&#xff0c;为输入模拟信号最高频率 否则&#xff0c;信号会发生混叠 2…

电脑本地搭建privateGPT流程

文章目录 前言效果所需文件流程1,python版本2,工程文件安装2.1服务端搭建2.2客户端搭建 3,模型下载 前言 当我的电脑主机在本地运行privateGPT的时候我听到了cpu风扇在呼啸, 至于privateGPT是干什么的, 其实就相当于一个文档分析软件,只不过内置了一个gpt,你把文件丟给他,你可…

Oracle delete删除数据是否为逻辑删除、新插入数据占用的数据块位置实验

假设一&#xff1a;数据库delete删除为直接删除 假设二&#xff1a;数据库delete删除为逻辑删除&#xff0c;在数据块标记出来&#xff0c;但是实际并没有删除。 方式一&#xff1a;通过dump数据块的方式来实现 我们先用小数据量&#xff0c;通过dump数据块的方式来实现 -- 数…

虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本

虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本 情况描述原因分析解决方法 情况描述 公司开发机上打开虚拟机报错&#xff08;w10ent64d.vmx&#xff09;&#xff08;这虚拟机是我在家里开发机上创建的&#xff09;&#xff0c;报错截图如下&#xff1a; 报错信息…

个人音乐播放网站项目(SpringBoot+Linux部署上线)

在做完第一个博客系统项目以后&#xff0c;接着做下一个项目&#xff1a;音乐播放网站项目&#xff0c;此项目应用的技术栈和第一个项目是差不多的&#xff0c;即算是学完SSM等知识以后的两个入门级Java开发项目吧。 此项目包含的核心功能有&#xff1a; 一、登录、注册、退出…

【MySQL】创建和管理数据库

1、创建数据库 创建数据库——CREATE DATABASE 数据库名;创建数据库并指定字符集——CREATE DATABASE 数据库名 CHARACTER SET 字符集;判断数据库是否已经存在&#xff0c;不存在则创建数据库——CREATE DATABASE IF NOT EXISTS 数据库名; 2、使用数据库 查看当前所有的数据库…