Metacom — RPC протокол
Сетевой протокол Metarhia: RPC + файлы + события через одно WebSocket-соединение. Транспорт скрыт от UI.
Что это
Metacom — это бинарно-агностичный протокол поверх любого транспорта (WebSocket, HTTP, HTTP/2, gRPC, WebRTC, MessagePort). Включает три типа пакетов: RPC-вызовы, передача файлов, события.
В версии 2025 добавлен 4-й тип: синхронизация state (для local-first).
Прозрачный RPC
// Клиент: вызывает как локальный метод
const stock = await api.warehouse.getStock(itemId);
// Сервер: applications/warehouse/api/getStock.js
module.exports = async ({ itemId }) => {
return await db.stock.find(itemId);
};
UI не знает, что вызов идёт по сети. Введён слой абстракции, в котором даже про Metacom можно не знать.
Что умеет
- RPC — вызов удалённых методов.
- File transfer — стриминг файлов в обе стороны через тот же канал.
- Event bus — pub/sub.
- State sync (с 2025) — синхронизация состояния для local-first.
- Мультиплексирование — всё через одно WebSocket-соединение.
Раньше vs сейчас
| Было | Стало |
|---|---|
| Metacom был только в Impress | Metacom отвязан, работает на чистом Node |
| Только RPC | RPC + файлы + события + state |
| 2 WebSocket (RPC и sync) | Одно соединение для всего |
Минимальный сервер
const metacom = require('metacom');
const server = new metacom.Server(application, options);
server.listen(8000);
- ~5.5 КБ кода без зависимостей кроме
metacom. - Подключается к чистому Node HTTP-серверу — можно отдать в Fastify/Nest.
Транспорт-абстракция
- Можно дописать любой транспорт: WebRTC, UDP, gRPC, MessagePort.
- Уже есть: WebSocket (основной), HTTP, gRPC (от Георга), MessagePort (для Service Worker proxy).
- Стандартный WebSocket-клиент из браузера работает out-of-the-box.
Клиентская сторона
// Загружаем интерфейс — клиент строится по introspection
await app.metacom.load('warehouse');
window.api = app.metacom.api;
// Вызываем
const result = await api.warehouse.getStock(123);
Клиент перестраивается через introspection — не пишется руками.
🎓 Источники
- 🎓 Metacom — сеть прозрачна для API · 2025-12-11
- Цитата: «Он позволяет через метаком делать RPC, вызов удаленных процедур, качать файлы, сделать event bus. Можно даже сказать, что метаком — это такой универсальный транспорт.»
- 🎓 Сервер на Node.js c RPC через Websocket — Metacom (Claude Sonnet) · 2026-03-06
- 🎓 Разработка API на Node.js и Metarhia · 2021-01-18