Элис Элис отвечает
IT и разработка

Один протокол — семь языков: как Moq учит Python и Swift понимать друг друга

14.11.2026 · 4 мин. чтения

Один протокол — семь языков: как Moq учит Python и Swift понимать друг друга

Представьте: вы пишете скрипт на Python, который публикует видеопоток, а смотрит его приложение на Swift — и всё это работает без единой строчки склеек и костылей. Именно такую картину описывает open-source проект Moq: две основные реализации и семь языковых привязок, которые говорят на одном сетевом протоколе.

Звучит как мечта любого, кто хоть раз пытался подружить медиа-пайплайны на разных языках. Разбираемся, что там внутри.

Как это устроено

Базовая логика живёт в Rust — это референсная реализация, на ней построены все серверные инструменты. Отдельно есть TypeScript-версия, написанная с нуля для браузеров: она опирается на WebTransport и WebCodecs. А остальные семь привязок — Python, Kotlin, Swift, Go, Dart и C++ — генерируются из одного UniFFI-крейта moq-ffi и оборачиваются в идиоматичный для каждого языка слой. Для C сделали отдельный ABI, написанный руками.

Главная фишка в том, что новая функция, добавленная в ядро, появляется во всех привязках одновременно. Не нужно ждать, пока мейнтейнер Python-обёртки соизволит обновиться — всё синхронно по определению.

Что умеют все привязки

  • Подключаться к релею с TLS и JWT прямо в URL — или поднимать сессии самостоятельно и принимать запросы по пути.
  • Автоматически переподключаться с backoff, если транспорт отвалился.
  • Искать трансляции по префиксу, ждать конкретную или запрашивать по пути.
  • Публиковать и подписываться на медиа — либо готовыми кодеками (VideoToolbox, Media Foundation, NVENC, openh264, Opus), либо отдавая сырые пиксели и PCM и позволяя привязке всё закодировать.
  • Работать с JSON-треками: последнее значение с merge-patch-дельтами, лог с append или скользящее окно записей.

Плюс сырые треки произвольных байтов с приоритетом и максимальной задержкой для каждого подписчика, отдельные live-датаграммы без кэширования и возможность вытащить один кэшированный групповой пакет по номеру.

Про производительность честно

Авторы не скрывают: обёртки добавляют накладные расходы. В бенчмарках сравнивают каждую привязку с rust-ffi — прямым вызовом из Rust. Коэффициент выше 1 означает, что обёртка дороже прямого вызова. Измеряют пропускную способность, CPU на байт и задержку синхронных вызовов. И справедливо напоминают: реальная производительность приложения — это ещё сеть, кодеки и собственная обработка, а не только переход через границу языка.

📖 Кстати, больше новостей, гайдов и разборов для разработчиков мы собираем в нашей рубрике IT и разработка на сайте Lamvi.Art. Заходите почитать!

Что это значит для нас

Если вы пишете медиа-сервис, где бэкенд на Python, мобильное приложение на Swift, а веб-клиент на TypeScript, — Moq снимает целый класс головной боли. Не нужно держать три разных стека с разными багами и разными фичами. Один протокол, одна логика, разные обёртки. Подробности и таблицу привязок можно посмотреть в документации проекта.

Конечно, идеального серебра нет: накладные расходы на границе языка реальны, и для высоконагруженных сценариев, вероятно, стоит смотреть в сторону Rust напрямую. Но как способ быстро собрать работающий прототип на любимом языке — это отличный вариант.

В мире, где все устали от зоопарка несовместимых SDK, проект, который генерирует привязки из одного ядра, выглядит как глоток свежего воздуха. Будем следить.

📌 Чтобы не пропустить новые публикации, подписывайтесь там, где вам удобнее: Дзен или MAX.

💛 Если статья оказалась полезной, поддержите автора донатом.

Материал подготовлен на основе информации из открытых источников. Все права на исходные материалы принадлежат их авторам. Если вы являетесь правообладателем и возражаете против использования материала, либо обнаружили неточность или имеете иное мнение о фактах, изложенных в статье, — напишите нам по адресу info@lamvi.art. Мы всегда открыты к диалогу и внимательно рассмотрим ваше обращение.

Элис
Автор статьи
Элис
★ Рейтинг: 5.0 · Все статьи →

Читайте также

Оставьте комментарий

Вставить смайлик:

Меню

Элис

Элис

Онлайн
Прокрутить вверх