这次来谈谈ZeroMQ—基于消息队列的多线程网络库(一)搭建环境

Zeromq模式详解 ZeroMQ是一种基于消息队列的多线程网络库,提供跨越多种传输协议(TCP:传输控制协议,当传输出现错误时能自动予以纠正;UDP:用户数据包协议,当传输出现错误时会将错误信息丢弃;)的套接字。ZeroMQ是一个可伸缩层,可并行运行,分散在分布式系统间。 1.Request-Reply模式 问答一一对应 问答模式,由请求端发起请求,然后等待回应端应答。一个请求必须对应一个回应,从请求端的角度来看是发-收配对,从回应端的角度是收-发对。请求端可以是1~N个。该模型主要用于远程调用及任务分配等。 使用R. 阅读详情

ZeroMQ官方文档网址:http://zguide.zeromq.org/page:all

在这里插入图片描述

ZeroMQ是一个高性能异步消息程序库,用于分布式或高并发应用,提供了消息队列。但是他不像面向消息队列的中间件。ZeroMQ的运行时并不需要专门的消息代理。

在这里插入图片描述

ZeroMQ支持多种语言。

因为我主用C++所以这次我只会提及C和C++。

下面开始说安装过程:

需要安装的软件
apt-get install libtool
apt-get install autoconf
apt-get install pkg-config
下载 :
wget https://github.com/zeromq/libzmq/releases/download/v4.3.2/zeromq-4.3.2.tar.gz
解压:
tar xzfv zeromq-4.3.2.tar.gz
跳转到目录:
cd zeromq-4.3.2
./autogen.sh
./configure
make
make install

可能遇到的问题:
在这里插入图片描述
解决方法:
apt-get install libtool
在这里插入图片描述
解决方法:

apt-get install autoconf

如果出现err:missing some pkg-config macros (pkg-config package)
解决方法:apt-get install pkg-config

此时编写软件时要注意头文件。

如果你是要编写.c文件,那么你需要加上zmq.h。

如果你是要编写.cpp文件,那么你要加上zmq.hpp。

zmq.hpp的链接:https://share.weiyun.com/5oHKziQ

先给上C的代码例子:

//  Hello World server
 
#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
 
int main (void)
{
    //  Socket to talk to clients
    void *context = zmq_ctx_new ();
    void *responder = zmq_socket (context, ZMQ_REP);
    int rc = zmq_bind (responder, "tcp://*:5555");
    assert (rc == 0);
 
    while (1) {
        char buffer [10];
        zmq_recv (responder, buffer, 10, 0);
        printf ("Received Hello\n");
        sleep (1);          //  Do some 'work'
        zmq_send (responder, "World", 5, 0);
    }
    return 0;
}

编译命令:gcc client.cpp -lzmq

这是C++的代码例子:

//
//  Hello World server in C++
//  Binds REP socket to tcp://*:5555
//  Expects "Hello" from client, replies with "World"
//
#include <zmq.hpp>
#include <string>
#include <iostream>
#ifndef _WIN32
#include <unistd.h>
#else
#include <windows.h>
 
#define sleep(n)    Sleep(n)
#endif
 
int main () {
    //  Prepare our context and socket
    zmq::context_t context (1);
    zmq::socket_t socket (context, ZMQ_REP);
    socket.bind ("tcp://*:5555");
 
    while (true) {
        zmq::message_t request;
 
        //  Wait for next request from client
        socket.recv (&request);
        std::cout << "Received Hello" << std::endl;
 
        //  Do some 'work'
        sleep(1);
 
        //  Send reply back to client
        zmq::message_t reply (5);
        memcpy (reply.data (), "World", 5);
        socket.send (reply);
    }
    return 0;
}

编译命令为:g++ server.cpp -lzmq

如果出现:
fatal error: zmq.hpp: No such file or directory compilation terminated.

一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。

解决方法:将zmq.hpp复制到 /lib 或/usr/lib中。

ZeroMQ主要有三种模式:

Request-Reply(请求响应)

请求回应模型。由请求端发起请求,并等待回应端回应请求。从请求端来看,一定是一对对收发配对的;反之,在回应端一定是发收对。请求端和回应端都可以是 1:N 的模型。通常把 1 认为是 server ,N 认为是 Client 。ZeroMQ 可以很好的支持路由功能(实现路由功能的组件叫作 Device),把 1:N 扩展为 N:M (只需要加入若干路由节点)。从这个模型看,更底层的端点地址是对上层隐藏的。每个请求都隐含有回应地址,而应用则不关心它。

Publish-Subscribe(发布订阅)

这个模型里,发布端是单向只发送数据的,且不关心是否把全部的信息都发送给订阅端。如果发布端开始发布信息的时候,订阅端尚未连接上来,这些信息直接丢弃。不过一旦订阅端连接上来,中间会保证没有信息丢失。同样,订阅端则只负责接收,而不能反馈。如果发布端和订阅端需要交互(比如要确认订阅者是否已经连接上),则使用额外的 socket 采用请求回应模型满足这个需求。

Parallel Pipeline(管道)

管道是单向的,从 PUSH 端单向的向 PULL 端单向的推送数据流。



这章主要讲述如何安装编译和ZeroMQ的模型。下一章开始用代码来讲解相应的模型。
ZeroMQ 学习(一) 在这种模型中,有且仅有两个节点进行通信,一个充当发送方,另一个充当接收方。每个节点都可以同时进行发送和接收操作,通信双方之间是一对一的关系。 阅读详情

相关推荐

zeroMq的使用

ZeroMQ简介: ZeroMQ是一种基于消息队列的多线程网络库.提供跨越多种传输协议(TCP:传输控制协议,当传输出现错误时,能自动予以纠正;UDP:用户数据包协议,当传输出现错误时会将错误信息丢弃;)的套接字,ZeroMQ是一个可伸缩层,可并行运行,分散在分布式系统间. zeroMQ在设计上主要采用了以下几个高能性的特征: 1.无锁的队列模型 2.批量处理的算法 3.多核下的线程绑定,无...

LJ2415的博客 1639

ZeroMQ 手册

ØMQ/2.2 - The Guide Table of Contents By Pieter Hintjens With thanks to the hundred or so people who contributed examples in two dozen programming languages, who helped with suggestion

lionzl的专栏 7063

ZMQ/ZeroMQ使用手册

ZeroMQ的用户手册,适合C++、Java、Go、Python等通过MQ订阅消息的形式进行通信,低延迟,支持多语言SDK;手册内包含了ZeroMQ的基础入门知识,适合新手学习;介绍了ZeroMQ的集中模式包括高级请求-应答模式; 手册目录:ZeroMQ基础、ZeroMQ进阶、高级请求-应答模式、可靠的请求-应答模式、高级发布-订阅模式。 ZMQ(ØMQ、ZeroMQ, 0MQ)看起来像是一套嵌入式的网络链接库,但工作起来更 像是一个并发式的框架。它提供的套接字可以在多种协议中传输消息,如线程 间、进程间、TCP、广播等。你可以使用套接字构建多对多的连接模式,如扇出、 发布-订阅、任务分发、请求-应答等。ZMQ 的快速足以胜任集群应用产品。它 的异步 I/O 机制让你能够构建多核应用程序,完成异步消息处理任务。ZMQ 有 着多语言支持,并能在几乎所有的操作系统上运行。ZMQ 是 iMatix 公司的产品, 以 LGPL 开源协议发布。

ZeroMQ: 高性能、轻量级的消息队列系统

ZeroMQ: 高性能、轻量级的消息队列系统 是一个强大的开源消息队列系统,它提供了一种简单且高效的方式来在分布式计算环境中传输数据。ZeroMQ 支持多种编程语言,并提供了丰富的 API,使得开发人员可以轻松地将它集成到现有的应用程序中。 什么是 ZeroMQ? ZeroMQ 是一个跨平台的网络库,支持多种协议(如 TCP、UDP 和 IPC),并且具有高并发性、低延迟、易于使用等特点。它的设计...

gitblog_00008的博客 1289

中文版ZeroMQ文档

中文版ZeroMQ文档

飞牛NAS挂载115网盘避坑指南:为什么你的大文件总是传输失败?

本文深入解析了在飞牛NAS上通过AList挂载115网盘时,大文件传输失败的深层原因,包括风控机制、网络协议及兼容性问题。文章提供了从基础排查到高阶优化的系统性解决方案,并建议采用Kopia分片备份等终极策略,以实现稳定可靠的云端数据流转。

weixin_29306011的博客 1689

探索NetMQ:一个高性能、灵活的零依赖消息队列框架

是一个基于 [.NET Core](https://dotnet.microsoft.com/) 实现的、轻量级且高效的消息队列库,它是 [ZeroMQ](https://zeromq.org/) 在 .NET 生态系统中的封装。这个项目旨在为 .NET 开发者提供一种简单的方式来实现分布式系统的异步通信,提升应用性能和可扩展性。 ## 技术解析 ZeroMQ 提供了一种“无服务器”模式的网络...

gitblog_00063的博客 1057

LightTools 中LCD投影仿真的checkerboard pattern偏振控制技术解析

本文深入解析了在LightTools软件中进行LCD投影仿真时,利用checkerboard pattern(棋盘格图案)结合偏振控制技术来模拟液晶面板像素开关、提升图像对比度的核心方法。文章从实战角度出发,详细拆解了通过设置波片(如1/2波片)和偏振片来操控S光与P光转换的原理,并分享了在LightTools中搭建仿真模型、使用VBA脚本自动化配置参数以提高效率的实用技巧,为光学工程师优化投影系统仿真流程提供了清晰指导。

weixin_29305313的博客 344

消息库-ZeroMQ介绍

ZeroMQ (也称为 ØMQ, zmq 或 libzmq) 是一个高性能的异步消息传递库,用于构建分布式或并发应用程序。它提供了一个消息队列的抽象,允许不同的计算机和进程之间进行消息传递,而无需关心底层网络细节。ZeroMQ 不是一个传统意义上的消息队列服务器,而是一个嵌入到应用程序中的库,它提供了多种消息传递模式,如请求-应答、发布-订阅、推-拉等。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 4034

Unity Scriptable Build Pipeline (SBP) 详解

Unity 的可编程构建管线(Scriptable Build Pipeline, SBP)标志着引擎构建架构的一次关键转变,它从不透明的 C++ 实现转向了灵活、可扩展的 C# 框架。SBP 旨在满足现代游戏开发日益增长的需求,通过改进增量处理和高效缓存机制显著提升了构建性能。它赋予开发者对内容构建过程前所未有的控制力,从而能够针对特定项目需求进行深度定制。尽管 SBP 是 Unity 推荐的 Addressables 系统的重要基础层,但理解其核心组件、构建流程和高级功能对于优化大型项目、简化 CI/C

m0_57771536的博客 2209

ISP调试工程师相关面试问题_001

Qualcomm、MTK等ISP pipeline的框架原理及算法原理,还有调试经验。

notgoodenouf的博客 3549

零基础体验ZeroMQ:zmqc——命令行利器

零基础体验ZeroMQ:zmqc——命令行利器 zmqcnetcat for ØMQ. Small but powerful.项目地址:https://gitcode.com/gh_mirrors/zm/zmqc 在软件开发的世界里,高效且可靠的网络通信是至关重要的一环。当我们谈论这一点时,ZeroMQ(ØMQ)无疑是其中的明星,它提供了一种高性能的、灵活的消息传递模型。今天,我们向您推荐一个与...

gitblog_00039的博客 672

KNX实战—ETS5_智能开关从零到一的配置全流程

本文详细介绍了使用ETS5软件配置KNX智能开关的完整流程。从创建项目、构建建筑结构,到导入产品数据库、添加并配置开关模块与智能面板,再到设置延时开关、闪烁报警等进阶功能,并深入解析了群组地址的配置与链接方法。最后指导完成项目校验与程序下载,帮助用户实现从零到一的智能灯光基础控制功能配置。

joy55的博客 541

ZeroMQ笔记(基于消息队列的多线程网络库)

1ZeroMQ概述 ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。 2系统架构 2.1总体架构 zeroMQ几乎所有的I/O操作都是异步的,主线程不会被阻塞。Zero...

$好记性还是要多记录$ 1347

WinFrom真入门(1)——Windows窗体应用概念

用Winform开发的桌面程序,是在Windows操作系统上运行的,这个不用多说。窗体(Form)的作用‌:窗体是用户交互的容器,承载按钮、文本框等控件,构成应用程序的界面‌。在Windows操作系统中,窗体(窗口)所处可见,例如: 一个标准的窗体其实就是一块矩形区域,客户区域指的是窗口内部区域。除去标题兰和边框外的区域可视为内部区域,称为客户区域。我们开发人员可以在窗口的客户区域中放置控件,也可以在其中绘制出咱们所需要的图形。WinForm程序的项目的结构,如下图: Main()方法是程序的入口,这几行代

ByteGeek 1634

VMware ESXi 系统里创建虚拟机,虚拟磁盘日志损坏,如何或者把数据备份?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1639

ZeroMQ

1  ZeroMQ概述 ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。 2  系统架构 2.1总体架构 ZeroMQ几乎所有的I/O操作都是异步的,主线程不

开心 2万+

133、神经渲染与AI RAW:从RAW域到sRGB的端到端学习

去年在调试某款旗舰手机的主摄时,遇到一个让人头疼的问题——夜景模式下,暗部细节虽然保留得不错,但色彩总是偏紫,而且高光边缘有诡异的“水彩感”。ISP的3A统计跑了几十版,降噪强度从0调到100,甚至把去马赛克算法换成了自适应方向插值,问题依旧。后来团队里一位做AI的同事说:“要不试试端到端?从RAW直接出sRGB。”当时我第一反应是“这玩意儿能稳定吗?”结果试了一版,偏紫消失了,高光边缘的伪影也没了。从那以后,我开始认真研究神经渲染与AI RAW这条路线。

sundong_81的博客 32

这次来谈谈ZeroMQ—基于消息队列的多线程网络库(二)

ZeroMQ主要是有一个命名空间zmq。其下包含着很多类。zmq.hpp中主要的类有: context_t message_t socket_t monitor_t error_t 其中context_t、message_t都有一个友元类socket_t。 socket_t有一个友元类monitor_t。 开始讲解用代码例子来讲解: REQ-REP模型: client.cpp //// Hello World server i...

koganlee的博客 833

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

消息队列库——ZeroMQ

ZeroMQ(简称ZMQ)是一个基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。 ZMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。 ZMQ不是单独的服务,而是一个嵌入式库,它封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的API,应用程序通过加载库文件,调用API函数来实现高性能网络通信。 主线程与I/O线程: I/O线程,ZMQ根据用户

木牛的博客 1086

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ZeroMQ介绍

1  ZeroMQ概述 ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。 2  系统架构 2.1总体架构 ZeroMQ几乎所有的I/O操作都是异步的,主线程不会...

初心不改 9365

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

zeromq简介及各个通讯模式实例详解(附java实现)

Request-Reply模式 问答模式,使用REQ-REP套接字发送和接受消息是需要遵循一定规律的。客户端首先使用zmq_send()发送消息,再用zmq_recv()接收,如此循环。如果打乱了这个顺序(如连续发送两次)则会报错。类似地,服务端必须先进行接收,后进行发送。 Server: public static void main(String[] args) throws Excep

flourishLi的博客 2万+

zeromq java安装_初探ZeroMQ

在讲ZeroMQ前先给大家讲一下什么是消息队列。消息队列简介:消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。其实简单点说,消息队列就是如何使各分载器如何...

weixin_34221197的博客 868

zeroMQ学习

1  ZeroMQ概述 ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。 2  系统架构  总体架构 ZeroMQ几乎所有的I/O操作都是异步的,主线程不会被

The Coding World 998
上一篇: 如何用crontab运行一个图形化界面的程序
下一篇: log4cplus在Linux下编译及使用
我与四十大盗
博客等级 码龄8年 62粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值