首页 > 代码库 > ZeroMQ的学习和研究

ZeroMQ的学习和研究

ZeroMQ?(也拼写作 ?MQ、 0MQ 或 ZMQ) 是个非常轻量级的开源消息队列软件。它没有独立的服务器,消息直接从一个应用程序被发送到另一个应用程序。ZeroMQ?的学习和应用也非常简单,它只有一个 C++ 编写成的单个库文件?libzmq.dll, 可以链接到任何应用程序中。如果要在?.NET?环境中使用,我们需要用到一个?C#?编写的名为 clrzmq.dll 包装库。

ZeroMQ?可以在 Windows、 OS X 和 Linux 等多种操作系统上运行, C、 C++、?C#、 Java、 Python 等语言都可以编写?ZeroMQ?应用程序…这使得不同平台上的不同应用程序之间可以相互通讯。

ZeroMQ?的核心
ZeroMQ?的主要部分是套接字?Socket,不过它并未直接使用传统的套接字,而是在传统的套接字 API上提供了一个抽象层,这让用户从复杂和重复的编程任务中解脱出来。ZeroMQ?支持多种类型的套接字 (类型被定义为套接字自身的一个属性)。发送端和接收端的套接字类型组合造就了多种不同的通信模式,本文的后面我们会涉及到这一部分。

异步通讯
ZeroMQ?提供了异步通讯方式,这意味着即使在设置或关闭套接字连接、重新连接或进行消息传递的时候,应用程序都不会被阻塞。与程序正常任务处理并行的,这些操作由?ZeroMQ?自身在后台线程中进行管理。在需要时,ZeroMQ?会自动将消息 (无论是发件端或接受端) 放入队列中, 这一过程相当智能,消息会被推送到离接收端尽可能近的队列中。

传输协议
ZeroMQ?支持四类传输协议。每种传输协议由地址字符串来定义,该字符串由两部分组成:transport://endpoint。传输(transport) 部分指定了所使用的底层传输协议,端点(endpoint) 部分的格式则随着使用的协议而有所不同,具体如下:

  • TCP (tcp://hostname:port): 在主机之间进行通讯
  • INROC (inproc://name): 在同一进程的线程之间进行通讯(线程间)
  • IPC (ipc:///tmp/filename): 同一主机的进程之间进行通讯
  • PGM (pgm://interface;address:port 和 epgm://interface;address:port): 多播通讯

消息格式
ZeroMQ?默认可以发送或接收字符串和二进制的消息类型,但它对套接字之间传送的消息格式不加限制。我们可以自由地选择消息编码,如 XML,JSON、 MessagePack…在本文中为了简单起见,我们只使用字符串。

ZeroMQ的学习和研究