本文主要是介绍ZeroMQ,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ZeroMQ官方网站
ZMQ
ZMQ三种模型实例
管道模型
发布订阅模型
请求应答模型
ZMQ下载
sudo apt install libzmq3-dev
查看是否安装成功
查看是否有libzmq这个库文件
ZMQ通信类型
请求应答模型Request - Reply
请求端发起请求:客户端通过REQ模式的套接字发送一个同步请求到REP模式的服务端。
服务端处理请求:REP模式的服务端接收到请求后进行处理,并通过REQ模式的套接字返回响应。
发布订阅模型Publisher - Subscriber
核心思想是将消息的发送者(发布者)和消息的接收者(订阅者)解耦,使它们无需直接联系,这种模式通常用于需要一对多通信的场景。
Publish端单向分发数据,且不关心是否把全部信息发送给Subscribe端。如果Publish端开始发布信息时,Subscribe端尚未连接进来,则这些信息会被直接丢弃。Subscribe端只能接收,不能反馈,且在Subscribe端消费速度慢于Publish端的情况下,会在Subscribe端堆积数据。
一对一结对模型Exclusive-pair
一对一结对模型(Exclusive-Pair)是一种网络通信模型,它将两个套接字一对一地连接起来,类似于一个TCP连接,但TCP服务器只能接受一个连接。在这种模型中,数据可以双向流动。
管道模型Push - Pull
从 PUSH 端单向的向 PULL 端单向的推送数据流。如果有多个PULL端同时连接到PUSH端,则PUSH端会在内部做一个负载均衡,采用平均分配的算法,将所有消息均衡发布到PULL端上。与发布订阅模型相比,管道模型在没有消费者的情况下,发布的消息不会被消耗掉;在消费者能力不够的情况下,能够提供多消费者并行消费解决方案。该模型主要用于多任务并行。
这种模型的特点是数据传输是单向的,即数据只能从PUSH端流向PULL端,而不能反向流动。
localhost和*
在后续的代码中,你会频繁地使用下面地两个函数connect()和bind(),那么他们分别是什么意思呢。
socket_push.connect("tcp://localhost:8889");
socket_pull.bind("tcp://*:8889");
localhost
localhost 是一个特殊的主机名,用于指向当前设备的本地地址。当你在代码中使用 localhost 时,你实际上是在引用运行该代码的计算机本身。
*的意义
tcp://:8889 中的星号()是一个通配符,表示绑定到所有可用的网络接口,而不仅仅是 localhost。
这篇关于ZeroMQ的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!