02_c/c++开源库ZeroMQ

2024-04-26 21:36
文章标签 c++ 02 开源 zeromq

本文主要是介绍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


这篇关于02_c/c++开源库ZeroMQ的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/938715

相关文章

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。