Getting two apps to talk is always a challenge. They have to agree on what the data looks like. And what it means. They have to agree on how the data is organised into a message. XML, binary, or something else? They have to agree how to speak to each other.
They have to agree on security. They have to agree how to connect, across what networks. They need to queue messages that can't be delivered immediately. They need to detect and handle errors properly.
Many apps try to solve these problems from scratch. But you can also buy big, expensive, slow packages called "messaging systems" that handle a lot of these jobs for you.
Some of these systems even agree on standard protocols like AMQP. Using a messaging system usually costs a lot but it gives you the power to bring apps together.
Messaging used to be for big wealthy firms only, and the really fast messaging systems are still very expensive. This situation is changing.
0MQ ("ZeroMQ") final goal is to become the fastest messaging ever. The way to get performance is to optimise the whole software and hardware stack together. So, 0MQ is closely developed with major hardware firms.
0MQ is already very fast because it's already getting 30 micro-seconds end-to-end latencies and over 3 million messages a second today.
0MQ is intended to be POSIX compliant and is compatible with the following platforms:
· Mac OS X (tested on 10.5)
· Linux (tested on Debian 4.0, Ubuntu 8.0.4)
· FreeBSD (tested on 5.5 release)
· Solaris (tested on 8, 10)
Here are some key features of "0MQ":
· Built on standards: for frameworks, protocols, and community.
· Demolishes any network, from 10Gb Ethernet, to 4X IB.
· Transfers 2M messages a second on a 1Gb network with one CPU at each end.
· End-to-end latency under twenty ?sec over TCP using custom network hardware and drivers.
· Beats any commercial product: faster, more portable, more reliable, more usable.
· Built for the community: GPLv3 software developed in an active community.
· Designed for the real world: stocks, grids, real time data, streams, video, gaming.
· Runs everywhere: the smallest devices, all operating systems, all languages.
· Fully distributed: no central servers to crash, millions of WAN and LAN nodes.
· Extensible framework: kernel-style drivers for custom hardware, protocols or applications.
What's New in This Release: [ read full changelog ]
Reverted functionality:
· Wire format changes. The 0MQ 3.1 wire format is identical to that of 0MQ 2.1.
· LABELs and COMMANDs have been removed.
· Explicit identies are re-introduced, however they can be used only for explicit routing, not for durable sockets.
· The ZMQ_ROUTER and ZMQ_DEALER socket types are once again aliases for ZMQ_XREQ and ZMQ_XREP.
New functionality:
· The zmq_getmsgopt() function has been introduced.
· Experimental IPv6 support has been introduced. This is disabled by default, see the zmq_setsockopt() documentation for enabling it.
Other changes:
· The default HWM for all socket types has been set to 1000.
· Many bug fixes.
Building:
· The dependency on libuuid has been removed.
· Support for building on Android, and with MSVC 10 has been added.