Metacom — транспорт-независимый RPC
Главная идея Metacom: UI и бизнес-логика вызывают API одинаково — независимо от того, какой транспорт под капотом (WebSocket, HTTP, WebRTC, MessagePort, UDP).
Идея
Везде в индустрии транспорт пробивается в API: REST требует методы и URL, GraphQL — Query/Mutation, gRPC — protobuf-схему. Поменять транспорт — переписать клиент.
Metacom: вызов выглядит как локальный async-метод. Что под капотом — деталь реализации.
const stock = await api.warehouse.getStock(itemId);
В этой строке нет HTTP, нет URL, нет WebSocket. Транспорт меняется — строка та же.
Уровни абстракции
UI (React/Vue/...)
↓
api.warehouse.getStock(123) ← UI не знает про Metacom
↓
Metacom proxy ← выбирает транспорт
↓
WebSocket / HTTP / WebRTC / MessagePort
Реальные транспорты
- WebSocket — основной, bidirectional, long-lived.
- HTTP/HTTPS — для legacy и REST-совместимости.
- HTTP/2 и HTTP/3 — приедут вместе с Node.js.
- gRPC — транспорт от Георга (контрибьютор).
- WebRTC — для P2P (можно прикрутить).
- MessagePort — для общения с Service Worker (как прокси к WebSocket).
- UDP — можно дописать.
Зачем
- Локально работаешь как с локальным модулем — потом включаешь сеть, ничего не меняется.
- Меняешь транспорт без переписывания UI — нужен P2P? Подменили WebSocket на WebRTC.
- Mock/stub в тестах тривиален — Metacom-транспорт может быть просто заглушкой.
- Один WebSocket мультиплексируется — RPC, файлы, события, state — всё в одном соединении.
Изоляция слоёв
Metacom изолирует не только клиент/сервер, но и любые абстрактные слои. UI ↔ business-logic ↔ storage — каждое взаимодействие можно завернуть в Metacom.
Цитата
«Это таким образом становится универсальным средством, которое изолирует не только клиент от сервера или бизнес-логику от того места, откуда она вызывается. Но еще можно взаимодействие любое между абстрактными слоями.»
Сравнение
| REST | GraphQL | gRPC | Metacom | |
|---|---|---|---|---|
| URL/method видны | да | да | нет | нет |
| Транспорт | HTTP | HTTP/WS | HTTP/2 | любой |
| Один канал для всего | нет | нет | нет | да |
| Клиент пишется руками | да | сгенерён | сгенерён | introspection |
🎓 Источники
- 🎓 Metacom — сеть прозрачна для API · 2025-12-11
- Цитата: «Это такой универсальный транспорт, который с нас снимает необходимость что-то вообще знать про сетевое взаимодействие.»
- 🎓 Сервер на Node.js c RPC через Websocket — Metacom · 2026-03-06