Shomla - это кроссплатформенный сервис голосовых чатов (1 на 1), работающий прямо в браузере с минимальной задержкой без установки нативных приложений. В основе платформы лежит высокопроизводительный сигналинг сервер на Go (Golang), управляющий WebSocket сессиями и очередями умного матчинга, а также гибридная инфраструктура WebRTC (P2P + распределённый пул TURN серверов) с динамической авторизацией. Фронтенд построен по принципу Zero Framework PWA с выносом тяжёлой логики в WebWorkers, что обеспечивает мгновенный отклик интерфейса даже на бюджетных мобильных устройствах.
- Адрес проекта в продакшне: shomla.com
- Стек технологий: Go (Gorilla WebSockets, Fiber, Chi), PHP 8, SQLite, WebRTC, Hybrid TURN/STUN (REST API Ephemeral Auth), Vanilla JS, WebWorkers, PWA.
Инженерная и продуктовая задача
При создании браузерной платформы живого общения разработчики сталкиваются с четырьмя главными проблемами:
- Сетевая пробиваемость (NAT Traversal): до 20 25% пользователей мобильных сетей и корпоративных Wi Fi находятся за симметричным NAT или жёсткими файрволами, где прямое P2P соединение невозможно.
- Гонки состояний (Race Conditions) при матчинге: когда тысячи пользователей одновременно ищут собеседника, переключают комнаты или теряют связь, сигналинг сервер должен мгновенно перестраивать пары без "мёртвых" сессий.
- Расход бюджета на медиа трафик: ретрансляция аудио через TURN серверы без защиты от парсинга и утечки ключей быстро разоряет инфраструктуру.
- Трение при установке (Onboarding Friction): заставлять пользователя скачивать приложение из App Store или Google Play ради быстрого голосового звонка снижает конверсию на старте в несколько раз.
Ключевые архитектурные решения Shomla
| Узел системы | Реализация в Shomla | Бизнес и продуктовый эффект |
| Сигналинг и координация сессий | Кастомный сервер на Go поверх Gorilla WebSockets и роутеров Fiber / Chi | Поддержка тысяч одновременных полнодуплексных соединений с минимальным потреблением RAM и субмиллисекундной маршрутизацией SDP/ICE-кандидатов |
| Сетевая связность и обход NAT | Гибридная схема STUN/TURN: связка собственных узлов и внешних API с динамической генерацией временных токенов (TURN REST API) | Стабильное установление аудио канала в сложных мобильных сетях и полная защита TURN-релеев от несанкционированного использования трафика |
| Движок умного матчинга (Matchmaking Engine) | In memory конечный автомат (State Machine) на Go с фильтрацией по языку, интересам, полу и формату (1 на 1) | Мгновенный подбор релевантного собеседника без блокировок базы данных и зависших "призрачных" комнат при обрыве связи |
| Клиентская архитектура (Frontend) | Чистый JavaScript (Zero Framework), PWA и вынос сетевой/фоновой обработки в WebWorkers | Нулевой вес сторонних UI бандлов, плавный интерфейс без фризов главного потока (UI thread) и работа на iOS/Android/Desktop как нативное приложение |
| Хранение данных и модерация | Локальная персистентность на SQLite, поведенческие триггеры, детекция голосовой активности и инструменты автомодерации | Высокая скорость чтения/записи профилей и сессий без сетевых задержек внешней СУБД, поддержание безопасной среды внутри чата |