ZeroMQ pour C++ : messagerie haute performance
1. Qu'est-ce que ZeroMQ et pourquoi l'utiliser ?
ZeroMQ (également connu sous les noms ØMQ, 0MQ ou zmq) est une bibliothèque de messagerie asynchrone haute performance, conçue pour les applications distribuées et parallèles. Contrairement aux courtiers de messages traditionnels (comme RabbitMQ ou Kafka), ZeroMQ ne possède pas de serveur central. À la place, elle fournit des sockets qui peuvent se connecter directement les uns aux autres, formant des topologies arbitraires (étoile, bus, cluster, etc.). La bibliothèque implémente différents modèles d'échange : "requête-réponse" (REQ/REP), "éditeur-abonné" (PUB/SUB), "pipeline" (PUSH/PULL) et bien d'autres.
Pourquoi utiliser ZeroMQ ? Dans le monde moderne, les logiciels fonctionnent rarement de manière isolée. Microservices, calcul distribué, systèmes temps réel, chats, plateformes de trading financier — tous nécessitent un échange de données rapide et fiable entre composants. ZeroMQ résout ce problème "prêt à l'emploi" : elle gère toute la complexité de la gestion des connexions réseau, de la mise en mémoire tampon, des tentatives de renvoi et de la fragmentation des messages. Le développeur n'a qu'à choisir le modèle d'échange approprié et appeler quelques fonctions.
Les avantages clés de ZeroMQ : une vitesse incroyable (la bibliothèque est écrite en C++ et utilise des algorithmes efficaces), une consommation mémoire minimale, la prise en charge de nombreux langages (dont C++, Python, Java, C#, Go, etc.), ainsi qu'un support intégré du chiffrement (via l'extension CurveZMQ) et des proxys.
2. Installation
Pour C++, il n'existe pas de gestionnaire de paquets unique comme pip pour Python. Cependant, ZeroMQ peut être installé de plusieurs manières :
Méthode 1 : Gestionnaire de paquets système (Linux/macOS)
# Ubuntu/Debian
sudo apt-get install libzmq3-dev
# Fedora/RHEL
sudo dnf install zeromq-devel
# macOS (Homebrew)
brew install zeromq
Méthode 2 : Compilation depuis les sources
Téléchargez la dernière version depuis GitHub et compilez-la :
git clone https://github.com/zeromq/libzmq.git
cd libzmq
mkdir build && cd build
cmake ..
make -j4
sudo make install
Méthode 3 : vcpkg (Windows/Linux/macOS)
vcpkg install zeromq
Après l'installation, n'oubliez pas d'inclure le fichier d'en-tête zmq.hpp (wrapper C++) et de lier la bibliothèque libzmq (ou zmq.lib sous Windows).
3. Démarrage rapide — exemple minimal fonctionnel
L'exemple le plus simple est une paire "serveur-client" utilisant le modèle REQ/REP. Le client envoie "Hello", le serveur répond "World".
Serveur (server.cpp)
#include <zmq.hpp>
#include <string>
#include <iostream>
int main() {
// Créer un contexte (un par processus)
zmq::context_t context(1);
// Créer une socket de type REP (répondeur)
zmq::socket_t socket(context, zmq::socket_type::rep);
socket.bind("tcp://*:5555");
while (true) {
zmq::message_t request;
// Attendre une requête du client
socket.recv(request, zmq::recv_flags::none);
std::string msg(static_cast<char*>(request.data()), request.size());
std::cout << "Reçu : " << msg << std::endl;
// Envoyer une réponse
zmq::message_t reply(5);
memcpy(reply.data(), "World", 5);
socket.send(reply, zmq::send_flags::none);
}
return 0;
}
Client (client.cpp)
#include <zmq.hpp>
#include Aussi dans la bibliothèque
ORM pour PHP : comparaison de Doctrine, Eloquent et Cycle — exemples de code
Cheerio pour JavaScript (Node.js) : guide complet avec exemples
Travailler avec Markdown en Rust : bibliothèques et outils
Rate limiting en C++ : bibliothèques et outils pour contrôler les requêtes
Pest pour PHP : guide complet avec exemples