Обновлено 2026-05-30 · после раскатки исправлений 6.61–6.64.
$MIN in version_check.php теперь равен $CURRENT (=6.66). Любая версия старше принудительно поднимается до текущей.$MIN.| Аудитория, MAU | Одновременных WS (пик) | Состояние одного VPS | Главное узкое место |
|---|---|---|---|
| ≤ 30k | ≤ 3k | Десятикратный запас, простой | В нашем стеке ничего |
| 30k — 100k | 3k — 10k | Целевой диапазон, комфортно | Процессор Workerman легко справляется с понгами и событиями. База работает по первичным ключам. На сокеты уходит 500 МБ–1 ГБ памяти. |
| 100k — 200k | 10k — 20k | Работа на пределе | Единственный процесс Workerman перегревается на пике. Стоит вылезти багу с обрывами WebSocket — начинается деградация. |
| > 200k | > 20k | Упираемся в потолок | Нужна фаза C (Workerman count=4 плюс Redis pub/sub для общего $hosts/$guests). |
| Metric | До исправлений | После 6.64 | Где сделано |
|---|---|---|---|
ble_token_renew в очереди, пока владелец офлайн |
1300 за 4 ч | 1 (дедуп по UNIQUE INDEX) | Server — работает с любым клиентом |
| Повторы HTTP при сбое сети | 5 ключей × 1/мин = 7200 в сутки | ~50 в сутки (откат 30 минут) | Клиент 6.64 — нужен новый APK |
| Переподключения WebSocket при нестабильной сети | ~10/мин (повтор через 1 с) | ~1/мин (откат 60 с) | Клиент 6.62+ — нужен новый APK |
| Обращения к базе на hello при нестабильном WebSocket | ~50/с на 10 тысячах клиентов | ~5/s | Server — ограничение в 5 секунд защищает от любого клиента |
| Неудачные события fire в настройках гостя | 60+ в сутки на гостя с просроченным токеном | 0 | Клиент 6.63 |
| Волны перерисовки на guest_ok | на каждом numbers_update | только при реальном изменении | Клиент 6.64 |
enqueueHostMsg — даже если клиент 6.55 пришлёт 1300 одинаковых продлений, в очередь ляжет одно.$GLOBALS['apk_url'] in _config.php — переезд на R2 или CDN делается одной строкой, без выпуска приложения.Решение: поднят $MIN = '6.66'. Любой старый клиент на первом же versionCheck получает блокирующий диалог Обновите приложение (интерфейс уже есть, см. App.kt:checkVersionAsync).
Прямо сейчас count=1 — один процесс PHP держит ВСЕ WebSocket в массивах $hosts/$guests/$calls in-memory.
Конкретные пороги:
Что делать по мере приближения к 15 тысячам:
apt install redis-server).count=4 (по числу ядер VPS).$hosts/$guests/$calls в Redis HASH со сроком жизни.Effect: линейное масштабирование до 4×, потолок поднимается примерно до 40–60 тысяч одновременно.
Сегодня APK на 22 МБ раздаётся каждому пользователю с нашего же VPS. На ста тысячах это 2,2 ТБ исходящего трафика за выпуск — свой канал может не потянуть или выйти дорого.
Подготовлено в 6.64:
$GLOBALS['apk_url'] in _config.php — единый источник правды для адреса.download.php и version_check.php читают его оттуда.Когда переезд понадобится:
entrixy.apk.apk.entrixy.com через CDN Cloudflare._config.php: $GLOBALS['apk_url'] = 'https://apk.entrixy.com/entrixy.apk';assembleRelease add r2 cp app-release.apk apk-bucket/entrixy.apk.На нынешнем масштабе — десятки тестовых установок — переезд не нужен.
sudo supervisorctl restart dialer-ws.