ZMQ面面观

ZMQ是什么?
这是个类似于Socket的一系列接口,他跟Socket的区别是:普通的socket是端到端的(1:1的关系),而ZMQ却是可以N:M 的关系,人们对BSD套接字的了解较多的是点对点的连接,点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等,而ZMQ屏蔽了这些细节,让你的网络编程更为简单。ZMQ用于node与node间的通信,node可以是主机或者是进程
引用官方的说法: “ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列多线程网络库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核”。现在还未看到它们的成功。但是,它无疑是极具前景的、并且是人们更加需要的“传统”BSD套接字之上的一 层封装。ZMQ让编写高性能网络应用程序极为简单和有趣

好文:

ZMQ可以基于TCP协议,也可以不基于TCP协议.

https://www.cnblogs.com/zengzy/p/5122634.html

在ZeroMQ中并没有绝对的服务端与客户端之分,所有的数据接收与发送都是以连接为单位的,只区分ZeroMQ定义的类型,例如Response与Request,Publisher与Subscriber,Push与Pull等。。。

https://blog.csdn.net/fjslovejhl/article/details/16862817

  

函数zmq_socket()根据context参数创建一个ZMQ套接字(socket),并且以一个不透明指针的形式返回这新创建的socket。type参数指明了要创建的socket的类型,这个类型决定了在进行传输时在此socket上执行的语义。

新创建的socket初始值是未绑定的,并且未和任何终结点相联系。为了能够在一个socket上建立消息,必须先要使用zmq_connect(3)连接上一个终结点,或者至少有使用zmq_bind(3)函数绑定一个终结点来接收传入的消息。

https://www.cnblogs.com/fengbohello/p/4354989.html

# Zeromq的几种模式比较

* **REQ-REP:**  请求-应答型,同步,TCP,1对n(服务器),n对1(服务器).

* **PUB-SUB:** 发布-订阅,经典模式适用于单向的数据发布,更新流既没有起点也没有终点,类似于广播,异步,UDP,1对n(服务器)

* **PULL-PUSH:** 推拉模式,TCP,异步,1对n(服务器) (bind端绑定ip和port, 另一端去连接这个ip和port)

* **ROUTER-REQ-DEALER:** 请求应答型,同步,tcp,添加代理可以n(client)对m(server),分配身份。
原文:https://blog.csdn.net/qq_30264689/article/details/80999025

这种模式与pub/sub模式一样都是单向的,区别有两点:
1,该模式下在没有消费者的情况下,发布者的信息是不会消耗的(由发布者进程维护)
2,多个消费者消费的是同一列信息,假设A得到了一条信息,则B将不再得到

这种模式主要针对在消费者能力不够的情况下,提供的多消费者并行消费解决方案(也算是之前的pub/sub模式的那个"堵塞问题"的一个解决策略吧)

https://blog.csdn.net/iteye_14316/article/details/82037243

新战场:https://blog.csdn.net/Stephen___Qin
原文地址:https://www.cnblogs.com/Stephen-Qin/p/11188639.html