JSTP — предшественник Metacom

JavaScript Transfer Protocol. Первый RPC-протокол Metarhia (2014-2018). Идеи JSTP легли в основу Metacom.

Что такое JSTP

RPC-протокол, в котором пакеты — это JSON5-объекты. Транспорт абстрагирован (TCP, WebSocket, Unix Domain Sockets). Прозрачный вызов удалённых методов.

Ключевые идеи (перешли в Metacom)

  1. Transport-agnostic — TCP для приложений, WebSocket для браузера, Unix-сокеты для IPC. Единый API.
  2. Introspection — клиент запрашивает интерфейс сервера, строит прокси.
  3. Прокси через EventEmitter — remote proxy расширяет EventEmitter, можно подписываться на события.
  4. Pluggable форматы — JSON5/JSON/protobuf можно подменять.
  5. JSTP CLI — REPL для отладки любого JSTP-сервера.

Цитата

«TCP можно использовать и для IPC в рамках одной машины. И при этом всё происходит с одинаковым интерфейсом, унифицированным, и полностью абстрагирует от вас реальный транспорт.»

Структура приложения JSTP

const app = jstp.createApplication('TestApp', {
  myService: {
    method1(value, callback) { ... },
    method2(value, callback) { ... },
  },
});
  • Application содержит interfaces (методы).
  • На клиенте после introspection — прокси-объект app.myService.method1(...).
  • Прокси — instance EventEmitter, можно слушать события.

Что улучшил Metacom

  • WebSocket по умолчанию — браузерная среда стала первичной.
  • Один канал для RPC + файлов + событий + state — JSTP был только про RPC.
  • HTTP/2 и WebRTC — новые транспорты.
  • Отвязка от Impress — Metacom можно запускать на чистой Node.

Бонусом JSON5

JSTP реализовал быстрый JSON5-парсер с code coverage 85%. JSON5 — JSON с комментариями, без обязательных кавычек на ключах, trailing commas.

История

  • 2014-2018 — JSTP, основной протокол Metarhia.
  • 2019+ — Metacom как наследник.
  • 2025 — Metacom отвязан от Impress, стал самодостаточным.

🎓 Источники

  • 🎓 Архив 2017 — JSTP JavaScript Transfer Protocol · Алексей Орленко · 2019-12-28
    • Цитата: «В качестве транспорта мы поддерживаем TCP, WebSockets и Unix Domain Sockets… И при этом всё происходит с одинаковым интерфейсом.»

См. также