ZeroMQ
本专栏内容摘录于《ZeroMQ云时代极速消息通信库》,文章为本文读书与学习笔记
董哥的黑板报
90后程序员!
展开
-
一文带你入门了解“零之禅“消息队列ZeroMQ
一、ZeroMQ概述ZeroMQ(又名ØMQ,MQ,或zmq)看起来像一个可嵌入的网络库,但其作用就像一个并发框架 ZeroMQ类似于标准Berkeley套接字,其提供了各种传输工具,如进程内、进程间、TCP和组播中进行原子消息传送的套接字 你可以使用各种模式实现N对N的套接字连接,这些模式包括:扇出、发布-订阅、任务分配、请求-应答 ZeroMQ的速度足够快,因此可充当集群产品的结构...原创 2020-05-08 00:00:44 · 19701 阅读 · 8 评论 -
手把手教学,以源码方式在Linux下编译安装消息队列ZeroMQ
一、Linux下的编译安装本次安装环境:Ubuntu 16.04.6①下载、解压下载安装包: 到官网下载最新的ZeroMQ安装包:http://download.zeromq.org/ 或者在github上下载:https://github.com/zeromq/zeromq4-1/releases 此处我们是在github中下载的4.1.7的releases版本 下载完...原创 2020-05-08 10:22:44 · 3466 阅读 · 6 评论 -
ZeroMQ文档白嫖:ZeroMQ的版本变更、zmq_version()函数
一、ZeroMQ的版本截止到目前为止(2020-05-08),ZeroMQ的最新版本为4.1.7版本变更下面介绍的是ZeroMQ从v2.2升级到v3.2的过程,因为是读书笔记,所以可能比较过时 在2012年初,ZeroMQ v3.2变得足够稳定,下面是v3.2相对于v2.2的一些变化: ①发布-订阅过滤如今发生在发布方,而不是在订阅方完成。这在许多发布-订阅用例中显著提高了性能 ...原创 2020-05-08 10:42:33 · 2190 阅读 · 0 评论 -
独树一帜,带你了解ZeroMQ对字符串处理
一、ZeroMQ对字符串的理解除了字符串的大小之外,ZeroMQ对你发送以及接收的数据一无所知,其只负责发送和接收 因此字符串格式化的责任就交给程序编写者二、字符串格式处理需要达成一致演示说明在C/C++中,字符串是用空字节来终止的,发送时可以使用额外的空字节来发送字符串。例如,下面发送一个6个字节的“Hello”字符串,因为其尾部默认含有一个空字节zmq_msg_init_...原创 2020-05-08 11:28:07 · 1948 阅读 · 0 评论 -
ZeroMQ文档白嫖:千字详解ZeroMQ的ctx上下文
一、获取正确的上下文ZeroMQ应用程序总是从创建一个上下文开始,然后使用它来创建套接字 上下文是指:在单个进程中所有套接字的容器,并充当inproc套接字的传输工具,这是在一个进程中连接线程的最快办法 单个进程中可以有多个上下文,不会出错,它们彼此之间都是独立的ZeroMQ实例,因此你需要自己做好处理 但是一般使用规则为: 在你的主代码开始处执行一个zmq_ctx_new()、在代码...原创 2020-05-08 12:49:31 · 3396 阅读 · 0 评论 -
ZeroMQ文档白嫖:一文带你全面了解ZeroMQ的套接字处理
一、套接字的创建与销毁二、zmq_socket()、zmq_close()、zmq_bind()、zmq_connect()、zmq_setsockopt()、zmq_getsockop原创 2020-06-16 15:20:48 · 3788 阅读 · 0 评论 -
ZeroMQ文档白嫖:一文述完ZeroMQ的套接字选项
一、设置套接字选项(zmq_setsockopt)二、获取套接字选项(zmq_getsockopt)原创 2020-06-16 18:14:04 · 3281 阅读 · 1 评论 -
全网仅此一篇!万字详解ZeroMQ的zmq_msg_t消息处理、多部分消息、及消息接口
一、ØMQ的数据处理数据数据时,TCP套接字和ØMQ套接字之间的差异: ØMQ套接字像UDP那样传递信息,而不是像TCP那样传递字节流。ØMQ消息是指定长度的二进制数据,因为它们的设计针对性能进行了优化,所以有点棘手 ØMQ套接字在一个后台线程执行自己的IO。这意味着消息到达本地输入队列并从本地输出队列被发送,不会影响到你的应用程序运行 ØMQ套接字根据套接字类型具有内置的1对N的路由行为 二、zmq_msg_t结构ØMQ用zmq_msg_t结构来表示一条小消息,其源码定义如下:原创 2020-06-17 10:38:10 · 6639 阅读 · 11 评论 -
ZeroMQ文档白嫖:聊聊ZeroMQ对错误的处理方式
一、错误分类及处理错误一般分为:内部错误、外部错误 内部错误一般是由自身程序导致的,程序绝不允许有内部错误的存在 外部错误,一般由外部传入,当程序接收到外部错误之后需要自己做处理(处理或是丢弃) 二、断言断言对于健壮的代码绝对是至关重要的,在C/C++中,断言会导致应用程序立即停止并报错。在其他语言中,你可能会得到异常或暂停 在C/C++中,会在优化的代码中将断言完全删除,所以不要过度使用assert()三、外部错误处理当检测到外部故障时,它会将一个错误返回给调用代码。如果你使用原创 2020-06-17 20:40:11 · 2406 阅读 · 0 评论 -
聊聊ZeroMQ的专业术语“零拷贝“,以及内存泄漏处理、消息丢失处理
一、ØMQ的零拷贝零拷贝:ØMQ的消息API可让你直接从应用程序缓冲区发送和接收消息,而不用复制数据。我们称之为“零拷贝”,并且可以在某些应用程序中用它来提高性能 零拷贝使用zmq_msg_init_data()来实现,一般不建议使用该函数,因为使用不好可能会带来内存泄漏 zmq_msg_init()函数介绍参阅:https://blog.csdn.net/qq_41453285/article/details/106794294zmq_msg_init()演示案例要做到零拷贝,你可以使用z原创 2020-06-19 00:05:29 · 2579 阅读 · 0 评论 -
以请求-响应案例为例,在ZeroMQ中编写多线程程序
使用ZMQ进行多线程编程(MT编程)将会是一种享受。在多线程中使用ZMQ套接字时,你不需要考虑额外的东西,让它们自如地运作就好。 使用ZMQ进行多线程编程时,不需要考虑互斥、锁、或其他并发程序中要考虑的因素,你唯一要关心的仅仅是线程之间的消息。 什么叫“完美”的多线程编程,指的是代码易写易读,可以跨系统、跨语言地使用同一种技术,能够在任意颗核心的计算机上运行,没有状态,没有速度的瓶颈。 如果你有多年的多线程编程经验,知道如何使用锁、信号灯、临界区等机制来使代码运行得正确(尚未考虑快速),那你可能会很沮原创 2020-06-21 10:09:28 · 2464 阅读 · 0 评论 -
重头戏!带你全览ZeroMQ的七大消息模式
一、ØMQ模式概述在ØMQ的套接字API下是消息传递模式的世界 让我们概括一下ØMQ所做的工作: 它快速而高效地把整块数据(消息)发送到节点,这里的节点可以是线程、进程或节点 ØMQ给你的应用程序提供一个单独套接字API来开展工作,而不管实际使用的传输协议是什么(例如,进程内、进程间、TCP或多播等) 各对等点撤销或接入的时候,ØMQ套接字都会自动重新连接 它会根据需要消息同时在发送者和接收者处进行排队。它仔细地管理这些队列,以确保进程不会耗尽内存而在适当的时候溢出到磁盘 它会处理套原创 2020-06-20 10:56:08 · 5528 阅读 · 0 评论 -
重头戏!ZeroMQ的发布-订阅模式详解:ZMQ_PUB、ZMQ_SUB
一、ØMQ模式总览ØMQ支持多种模式,具体可以参阅:https://blog.csdn.net/qq_41453285/article/details/106865539 本文介绍ØMQ的“发布-订阅”模式二、发布-订阅模式发布-订阅模式由https://rfc.zeromq.org/spec/29/正式定义 在发布-订阅模式中,有一个发布者用来发送消息,该模式中有很多订阅者会接收发布者发布的消息 ØMQ的套接字类型有4种: ZMQ_PUB ZMQ_SUB ZMQ_XPUB Z原创 2020-06-20 21:05:58 · 8814 阅读 · 10 评论 -
了解如何对ZeroMQ的发布-订阅进行封包处理
我们简单介绍了多帧消息,下面就来看看它的典型用法——消息信封。信封是指为消息注明来源地址,而不修改消息内容。 在发布-订阅模式中,信封包含了订阅信息,用以过滤掉不需要接收的消息。 如果你想要使用发布-订阅信封,就需要自行生成和设置。这个动作是可选的,我们在之前的示例中也没有使用到。在发布-订阅模式中使用信封可能会比较麻烦,但在现实应用中还是很有必要的,毕竟信封和消息的确是两块不想干的数据。 这是发布-订阅模式中一个带有信封的消息: 我们回忆一下,发布-订阅模式中,消息的接收是根据订阅信息来的,也就是原创 2020-06-21 10:14:11 · 1381 阅读 · 1 评论 -
重头戏!ZeroMQ的请求-响应模式详解:ZMQ_REP、ZMQ_REQ
一、ØMQ模式总览ØMQ支持多种模式,具体可以参阅:https://blog.csdn.net/qq_41453285/article/details/106865539 本文介绍ØMQ的“请求-响应”模式二、发布-订阅模式请求-响应模式由http://rfc.zeromq.org/spec:28正式定义 请求-应答模式应该是最常见的交互模式,如果连接之后,服务器终止,那么客户端也终止,从崩溃的过程中恢复不太容易 因此,做一个可靠的请求-应答模式很复杂,在很后面我们会有一部分系列文章介绍“可原创 2020-06-21 10:32:32 · 10985 阅读 · 9 评论 -
一文了解ZeroMQ的内置代理功能
一、前言在前面的两篇文章中我们分别介绍了“发布-订阅”代理和“请求-响应”代理: “发布-订阅”代理使用ZMQ_XPUB、ZMQ_XSUB实现,详情可参阅:https://blog.csdn.net/qq_41453285/article/details/106877202 “请求-响应”代理使用ZMQ_ROUTER、ZMQ_DEALER实现,详情可参阅:https://blog.csdn.net/qq_41453285/article/details/106878960 对于ØMQ来说,原创 2020-06-21 16:34:36 · 4535 阅读 · 0 评论 -
以XSUB、XPUB为例,浅谈ZeroMQ的传输桥接(转发代理)
一、需求场景ØMQ用户的一个常见要求是:“我如何使用X技术连接我的ØMQ网络?”。其中X是某些其他网络或通信技术 简单的答案是建立一个“桥梁”。桥是指一个小型应用程序,它用一种协议与一个套接字交流,并将其转换为另一个套接字的另一种协议。如果你喜欢,可以称之为一个协议解释器。ØMQ中一个常见的桥接问题是衔接两种传输协议或网络二、演示案例现在我们编写一个小型代理,它位于一个发布者和一组订阅者之间,衔接两个网络: 前端接口(SUB)面对着驻留了天气服务器的内部网络,而后端(PUB)面对着外部网络上原创 2020-06-21 17:25:55 · 3438 阅读 · 0 评论 -
重头戏!ZeroMQ的管道模式详解:ZMQ_PUSH、ZMQ_PULL
一、ØMQ模式总览ØMQ支持多种模式,具体可以参阅:https://blog.csdn.net/qq_41453285/article/details/106865539 本文介绍ØMQ的管道模式二、管道模式管道模式在有的地方也称为“流水线”模式 管道模式用于将数据分发到布置在流水线中的节点。数据始终沿流水线向下流动,流水线的每一级都连接到至少一个节点。当流水线级连接到多个节点时,数据在所有连接的节点之间进行轮询 管道模式由http://rfc.zeromq.org/spec:30正式定义原创 2020-06-23 14:27:35 · 7324 阅读 · 6 评论 -
重头戏!ZeroMQ的独家对模式详解:ZMQ_PAIR
一、ØMQ模式总览ØMQ支持多种模式,具体可以参阅:https://blog.csdn.net/qq_41453285/article/details/106865539 本文介绍ØMQ的独家对模式二、独家对模式在前面的文章中我们介绍过如何编写ØMQ多线程程序:https://blog.csdn.net/qq_41453285/article/details/106882216 独家对模式(Exclusive pair)用于将一个对等点精确地连接到另一个对等点。此模式用于跨inproc传输的线原创 2020-06-24 19:14:58 · 5087 阅读 · 0 评论