Capacidade do servidor

Atualizado a 2026-05-30 · após a implantação das correções 6.61–6.64.

O principal: pré-produção, sem legado

No servidor de produção ainda não há utilizadores reais. Todas as instalações são de teste. Daí que:

Estimativas por faixa de carga

Audiência, MAUWS simultâneos (pico)Estado de um único VPSPrincipal estrangulamento
≤ 30k ≤ 3k Dez vezes de margem, em repouso Nada na nossa pilha
30k — 100k 3k — 10k A faixa alvo, confortável O processador do Workerman aguenta pongs e eventos sem esforço. A base trabalha por chave primária. 500 MB–1 GB de RAM para os sockets.
100k — 200k 10k — 20k Trabalho no limite O único processo do Workerman sobreaquece no pico. Basta surgir um erro com WebSockets caídos para começar a degradação.
> 200k > 20k Batemos no teto É preciso a fase C (Workerman count=4 mais Redis pub/sub para um $hosts/$guests).

O que foi corrigido em 6.61–6.64

MetricAntes das correçõesDepois da 6.64Onde foi feito
ble_token_renew em fila enquanto o proprietário está offline 1300 em 4 h 1 (deduplicação por UNIQUE INDEX) Server — funciona com qualquer cliente
Repetições HTTP numa falha de rede 5 chaves × 1/min = 7200 por dia ~50 por dia (recuo de 30 minutos) Cliente 6.64 — é preciso um APK novo
Reconexões de WebSocket numa rede instável ~10/min (repetição a 1 s) ~1/min (recuo de 60 s) Cliente 6.62+ — é preciso um APK novo
Consultas à base no hello com WebSocket instável ~50/s em 10 mil clientes ~5/s Server — o limite de 5 segundos protege de qualquer cliente
Eventos fire falhados nas preferências do convidado mais de 60 por dia por convidado com token expirado 0 Cliente 6.63
Ondas de recomposição em guest_ok em cada numbers_update apenas numa alteração real Cliente 6.64

O que funciona de imediato para todos os clientes (correções do servidor)

As proteções do servidor vivem no tratamento das mensagens recebidas — aplicam-se seja qual for a versão do cliente.

O que só funciona depois de o cliente atualizar

Decisão: subido $MIN = '6.66'. Qualquer cliente antigo, no seu primeiro versionCheck recebe um diálogo bloqueante Atualize a aplicação (a interface já existe, ver App.kt:checkVersionAsync).

Escalar o Workerman — quando for preciso

Neste momento count=1 — um único processo PHP mantém TODOS os WebSockets nos vetores $hosts/$guests/$calls in-memory.

Os limiares concretos:

O que fazer à medida que se aproximam 15 mil:

  1. Instalar o Redis no VPS (apt install redis-server).
  2. Workerman count=4 (conforme o número de núcleos do VPS).
  3. Move $hosts/$guests/$calls para um HASH do Redis com TTL.
  4. Pub/sub entre trabalhadores: se uma mensagem chega a W1 mas o destinatário está em W2, encaminha-se pelo canal.

Effect: escalonamento linear até 4×, subindo o teto para cerca de 40–60 mil em simultâneo.

Mudar para uma CDN — quando for preciso

Hoje o APK de 22 MB é servido a cada utilizador a partir do nosso próprio VPS. Com cem mil, isso são 2,2 TB de tráfego de saída por versão — a nossa ligação pode não aguentar ou sair cara.

Preparado na 6.64:

Quando a mudança for precisa:

  1. Um bucket Cloudflare R2 → carregar entrixy.apk.
  2. Domínio próprio apk.entrixy.com através da CDN da Cloudflare.
  3. In _config.php: $GLOBALS['apk_url'] = 'https://apk.entrixy.com/entrixy.apk';
  4. No script de implantação, depois de assembleRelease add r2 cp app-release.apk apk-bucket/entrixy.apk.

Na escala atual — dezenas de instalações de teste — não é preciso mudar.

A lista de ações: o que está agora no servidor e na aplicação

Para que todas as correções funcionem:
  1. No servidor: sudo supervisorctl restart dialer-ws.
  2. Qualquer versão abaixo da 6.66 receberá um diálogo de atualização obrigatório no arranque seguinte.
  3. Depois de implantada a 6.66, a carga das tempestades de reconexão e das repetições cai uma ordem de grandeza.