初探ZeroMQ(一)认识ZeroMQ

学习zeromq已经有段时间了,看了英文原版的zeromq guide,也看了网上对zeromq guide的译作(说实话吧,翻译质量真心不怎么高),还看了很多人写的博客.确实看了许多,学了许多,也有许多东西想记录下来.

什么是zeromq

先贴上一段wiki中对zeromq的说明”ØMQ (also spelled ZeroMQ, 0MQ or ZMQ) is a high-performance asynchronous messaging library aimed at use in scalable distributed or concurrent applications. It provides a message queue, but unlike message-oriented middleware, a ØMQ system can run without a dedicated message broker. The library is designed to have a familiar socket-style API.”.说的明白点,zeromq就是用来替代原有的socket的一个库.使用原来的socket设计程序的时候,需要关注很多细节(比如同步/异步的问题,多线程的问题,使用不同的通信协议的问题,队列的设计问题),虽然不是很复杂,但是要设计一个高效的程序还是需要很深厚的功底.使用zeromq就不必关心这些问题了,它已经替你封装好了,并提供了socket-style风格的API,你需要关心的是怎样设计一个可靠的,可扩展的通信模型.

zeromq VS rabbitmq

学习zeromq这段时间,看到的最多的一个东西就是rabbitmq.所以非常有必要说明它两的区别.
如果你需要高效的传输数据,对数据不要求非常高的可靠性,也不要求数据能够持久化(虽然zeromq提供了zmq_swap()函数来持久化,但需要自己去实现持久化过程),那就用zeromq;
如果你对数据需要非常高的可靠性,要求数据能够持久化,那么用rabbitmq,当然了,rabbitmq的数据传输效率没有zeromq快,而且还是指数级的差距.

zeromq介绍

  1. ZeroMQ位于(TCP/IP协议层次结构)会话层和应用层之间。ZeroMQ 并不是一个对 socket 的封装,不能用它去实现已有的网络协议。

  2. 无消息服务器缓存数据。它不同于传统消息中间件通过服务器缓存转发消息的方式,而是优化点对点的消息传输。ZeroMQ能缓存消息,但是是在发送端缓存。ZeroMQ里有水位设置的相关接口来控制缓存量。当然,ZeroMQ也支持传统的消息队列(通过zmq_device来实现)。

  3. 强调消息收发模式。在点对点的消息传输上ZeroMQ将通信的模式做了归纳,比如常见的订阅模式(一个消息发多个客户),分发模式(N个消息平均分给X个客户)等等。

  4. 透明地支持多种通信方式。这主要包括:线程间通信,进程间通信,跨主机通信。只需修改连接的url即可,例如,进程间通信使用ipc:///11111, 跨主机通信使用tcp://10.5.0.170:26666, 不需要修改代码。

  5. 异步传输数据。通过新增一个IO线程发送数据,该IO线程在一次链接之后,不会马上释放,复用点与点之间数据链接,可以很好地提高性能。

你可能感兴趣的:(C++)