Metacom — RPC через WebSocket
Транспортно-независимый RPC из стека Metarhia. Один контракт — много транспортов (HTTP, HTTPS, HTTP/2, WebSocket, gRPC, WebRTC).
Что это
Metacom — протокол RPC от автора а. Идея: API на сервере — это набор асинхронных функций. Транспорт выбирается отдельно (HTTP для запросов, WebSocket для подписок, gRPC между сервисами). Бизнес-код один и тот же.
Архитектура
┌──────────────────┐ ┌──────────────────┐
│ Клиент (browser) │◄──ws───►│ Metacom-server │
│ api.users.find│ │ api/users/find.js│
└──────────────────┘ └──────────────────┘
▲ ▲
│ transport-agnostic │
└─── одно и то же API ───────┘
- Клиент строит зеркало API динамически.
- Server цепляется к чистому
http.Server(HTTP + Upgrade WebSocket). - Транспорты — pluggable: ws, HTTP, gRPC (Георг), WebRTC.
API / Пример (server)
// api/users/find.js
module.exports = async ({ id }) => {
return await db.users.findById(id);
};
// server.js — ~50 строк
const http = require('http');
const { Server } = require('metacom');
const server = new Server({ /* config */ });
server.bind(http.createServer).listen(8000);
Ключевые свойства
- Чистая нода + 1 dependency — без Express/Fastify.
- Мультиплексация стримов в одном TCP — несколько вызовов параллельно.
- Сессии и подписки на одном соединении.
- Серверная инициация — сервер может вызвать процедуру на клиенте.
- Один и тот же RPC внутри слоёв — изолирует не только клиент/сервер, но и любые абстрактные слои.
Производительность / Подводные камни
- Не SOAP/JSON-RPC — свой формат с компактной сериализацией.
- Свой WebSocket-сервер в новых версиях — потому что
wsломает контракт между релизами. - Service Worker + Metacom — прокси между вкладками; событийная шина через broadcast channel.
- GraphQL рядом — можно использовать GraphQL для query, Metacom для realtime событий.
- Vibe-coding с LLM работает лучше, если инфраструктура уже написана: модель пишет только бизнес-логику.
🎓 Источники
-
🎓 Metacom — сеть прозрачна для API при выборе транспорта · 2025-12-11
- Тезисы: Metacom отвязывается от Impress; своя реализация WebSocket-сервера; части стека можно использовать без всей инфраструктуры; прокси Metacom в Service Worker для объединения вкладок; мультиплексация стримов; рассылка всем кроме набора получателей.
- Цитата: «Часть API остаётся на GraphQL, а рядом открыли WebSockets — синхронизируется стейт.»
-
🎓 Сервер на Node.js c RPC через Websocket — протокол Metacom (Claude Sonnet 4.6) · 2026-03-06
- Тезисы: сервер на чистой ноде с одной зависимостью Metacom; ~5.5 КБ кода; интеграция с Fastify/Nest через
http.createServer; уже есть gRPC-транспорт (Георг); универсальный RPC между слоями; LLM эффективнее когда инфраструктура готова. - Цитата: «Это становится универсальным средством, которое изолирует не только клиент от сервера, но и взаимодействие любое между абстрактными слоями.»
- Тезисы: сервер на чистой ноде с одной зависимостью Metacom; ~5.5 КБ кода; интеграция с Fastify/Nest через
-
🎓 Ревью кода Websocket для Node.js и протокола metacom · 2025-08-30
- Тезисы: бинарный фрейм быстрее текстового; ping/pong для keep-alive; terminate зависших соединений.