作者:Pieter Hintjens,iMatix 首席执行官
请使用 问题跟踪器 提交所有评论和勘误。此版本涵盖最新的稳定版 ZeroMQ (3.2)。如果您使用的是旧版 ZeroMQ,则某些示例和解释可能不准确。
本指南最初是C 语言版,但也提供了 PHP、Java、Python、Lua 和 Haxe 版本。我们还将大部分示例翻译成了 C++、C#、CL、Delphi、Erlang、F#、Felix、Haskell、Julia、Objective-C、Ruby、Ada、Basic、Clojure、Go、Haxe、Node.js、ooc、Perl、Scala 和 Rust 版本。
前言 #
ZeroMQ 百字概览 #
ZeroMQ(也称为 ØMQ、0MQ 或 zmq)看起来像一个可嵌入的网络库,但行为更像一个并发框架。它提供套接字,可以通过各种传输方式(如进程内、进程间、TCP 和多播)传输原子消息。您可以使用扇出、发布-订阅、任务分发和请求-回复等模式 N 对 N 地连接套接字。它足够快,可以作为集群产品的核心。其异步 I/O 模型可以构建可扩展的多核应用程序,这些应用程序作为异步消息处理任务构建。它拥有大量的语言 API,并可在大多数操作系统上运行。ZeroMQ 来自 iMatix,是 LGPLv3 开源项目。
如何开始 #
我们取了一个普通的 TCP 套接字,向其中注入了从苏联秘密原子研究项目偷来的放射性同位素混合物,用 20 世纪 50 年代的宇宙射线轰击它,然后把它交给了吸毒成瘾的漫画书作者,他有着对身穿氨纶紧身衣的健硕肌肉的低劣伪装的恋物癖。没错,ZeroMQ 套接字就是网络世界的救世超级英雄。

Zero 之禅 #
ZeroMQ 中的 Ø 符号体现了权衡。一方面,这个奇怪的名字降低了 ZeroMQ 在 Google 和 Twitter 上的可见性。另一方面,它却让一些丹麦人非常恼火,他们写信给我们说“ØMG røtfl”、“Ø 不是一个搞笑的零!”以及“Rødgrød med fløde!”(这显然是一句侮辱,意思是“愿你的邻居是 Grendel 的直系后代!”)。这看起来是一笔公平的交易。
最初,ZeroMQ 中的“zero”意味着“零中间人”和(尽可能接近)“零延迟”。自那时起,它开始包含不同的目标:零管理、零成本、零浪费。更广泛地说,“zero”指的是贯穿整个项目的极简主义文化。我们通过消除复杂性而不是暴露新功能来增加力量。
读者对象 #
本书是写给那些希望学习如何构建将主导未来计算的大规模分布式软件的专业程序员的。我们假设您能够阅读 C 代码,因为尽管 ZeroMQ 在许多语言中使用,但这里的大多数示例都是用 C 编写的。我们假设您关心可扩展性,因为 ZeroMQ 主要解决的就是这个问题。我们假设您需要以尽可能低的成本获得最佳结果,否则您将无法体会 ZeroMQ 所做的权衡。除了这些基本背景之外,我们还将努力介绍使用 ZeroMQ 所需的所有网络和分布式计算概念。
致谢 #
感谢 Andy Oram 促成了 O’Reilly 出版社的书籍,并编辑了本文。
感谢 Bill Desmarais, Brian Dorsey, Daniel Lin, Eric Desgranges, Gonzalo Diethelm, Guido Goldstein, Hunter Ford, Kamil Shakirov, Martin Sustrik, Mike Castleman, Naveen Chawla, Nicola Peduzzi, Oliver Smith, Olivier Chamoux, Peter Alexander, Pierre Rouleau, Randy Dryburgh, John Unwin, Alex Thomas, Mihail Minkov, Jeremy Avnet, Michael Compton, Kamil Kisiel, Mark Kharitonov, Guillaume Aubert, Ian Barber, Mike Sheridan, Faruk Akgul, Oleg Sidorov, Lev Givon, Allister MacLeod, Alexander D’Archangel, Andreas Hoelzlwimmer, Han Holl, Robert G. Jakabosky, Felipe Cruz, Marcus McCurdy, Mikhail Kulemin, Dr. Gergő Érdi, Pavel Zhukov, Alexander Else, Giovanni Ruggiero, Rick “Technoweenie”, Daniel Lundin, Dave Hoover, Simon Jefford, Benjamin Peterson, Justin Case, Devon Weller, Richard Smith, Alexander Morland, Wadim Grasza, Michael Jakl, Uwe Dauernheim, Sebastian Nowicki, Simone Deponti, Aaron Raddon, Dan Colish, Markus Schirp, Benoit Larroque, Jonathan Palardy, Isaiah Peng, Arkadiusz Orzechowski, Umut Aydin, Matthew Horsfall, Jeremy W. Sherman, Eric Pugh, Tyler Sellon, John E. Vincent, Pavel Mitin, Min RK, Igor Wiedler, Olof Åkesson, Patrick Lucas, Heow Goodman, Senthil Palanisami, John Gallagher, Tomas Roos, Stephen McQuay, Erik Allik, Arnaud Cogoluègnes, Rob Gagnon, Dan Williams, Edward Smith, James Tucker, Kristian Kristensen, Vadim Shalts, Martin Trojer, Tom van Leeuwen, Hiten Pandya, Harm Aarts, Marc Harter, Iskren Ivov Chernev, Jay Han, Sonia Hamilton, Nathan Stocks, Naveen Palli, and Zed Shaw 为本书做出的贡献。