**ZeroMQ (ZMQ) и Remote Procedure Call (RPC)** – это два разных способа взаимодействия с нодой Monero. Они имеют разные цели и принципы работы.
**1. RPC (Remote Procedure Call)**
RPC используется для традиционного запроса-ответа (client-server), где клиент отправляет запрос, а сервер отвечает. Это основной способ взаимодействия с Monero Daemon (`monerod`).
**Принцип работы RPC в Monero**:
Клиент отправляет HTTP-запрос к `monerod`, например, чтобы получить баланс, транзакции или информацию о блоках.
`monerod` обрабатывает запрос и отправляет ответ.
Используется в кошельках (например, `monero-wallet-rpc`) и скриптах для управления нодой.
📌 **Пример использования RPC**:
Запрос: `get_block_count` → возвращает общее число блоков в цепочке.
Запрос: `get_info` → возвращает информацию о ноде (синхронизация, версия, хеш последнего блока).
**2. ZMQ (ZeroMQ)**
ZeroMQ — это асинхронный механизм передачи сообщений. В Monero он позволяет ноде отправлять обновления клиентам без необходимости постоянных запросов.
**Принцип работы ZMQ в Monero**:
`monerod` может автоматически отправлять сообщения клиенту при появлении новых блоков или транзакций.
Работает по принципу **"подписчик-издатель"** (Publisher-Subscriber).
Клиенты подписываются на события, и Monero нода отправляет обновления в реальном времени.
📌 **Пример использования ZMQ**:
Подписка на `json-full` позволяет получать полный JSON-объект нового блока сразу после его добавления в цепь.
Можно использовать в ботах, мониторинге и автоматических системах.
**Ключевые отличия**
Функция RPC ZMQ **Протокол** HTTP Binary (ØMQ) **Тип связи** Запрос-Ответ Асинхронный поток **Используется для** Управление нодой, запрос баланса, создание транзакций Отслеживание новых блоков и транзакций в реальном времени **Поддержка в Monero** `monerod --rpc-bind-port=18081` `monerod --zmq-pub tcp://127.0.0.1:18082`
**Когда использовать что?**
✅ **RPC** – если вам нужно управлять нодой и получать данные по запросу. Например, для кошельков и API.
✅ **ZMQ** – если вам нужны уведомления о новых блоках или транзакциях в реальном времени (без постоянных запросов).
В идеале, их можно комбинировать: RPC для управления, а ZMQ для событий реального времени. 🚀