Como foi construído
Documentação técnica
Os detalhes de engenharia por trás do AirBridge: transferência híbrida — conexão direta P2P (WebRTC) ou o Cofre (upload temporário) — rodando em PHP vanilla num servidor compartilhado.
1. Visão arquitetural
O sistema opera em dois modos para garantir que a transferência sempre rola:
- Modo Sala (WebRTC/P2P): conexão direta navegador-a-navegador via
RTCPeerConnection+RTCDataChannel. O PHP é só o signaling server (troca de SDP/ICE) por polling AJAX — compatível com hospedagem compartilhada. Há STUN + um relay TURN de fallback pra redes com NAT simétrico (4G/corporativa); se ainda assim a conexão direta não fechar, a UI sugere o Cofre. - Modo Cofre (upload temporário): upload pro servidor com retenção curta. O arquivo é gravado com nome de hash (desacoplado do original), entregue em stream (sem carregar tudo na memória) e some sozinho em 60 min via uma rotina de limpeza.
2. Stack
Backend
PHP 8 (vanilla, MVC leve), MySQL (PDO, prepared statements), cron de limpeza.
Frontend
JavaScript (ES6+), WebRTC, Alpine.js, Tailwind CSS.
3. Confiabilidade da conexão P2P
O calcanhar de Aquiles de todo P2P em navegador é o handshake. O AirBridge cuida dos pontos que costumam quebrar:
- O sinal de
joiné consumido uma única vez (sem re-emitir ofertas e derrubar o canal). - Candidatos ICE que chegam antes da descrição remota ficam num buffer e são aplicados depois (nada se perde).
- Backpressure no
DataChannel(controla obufferedAmount) pra arquivo grande não estourar o buffer. - Fila de envio: um arquivo por vez, com barra de progresso nas duas pontas.
4. Segurança
- Isolamento do storage: a pasta de uploads é bloqueada no
.htaccess(Require all denied+ execução de script desligada); os arquivos saem só via PHP, em stream. - Nomes desacoplados: o nome original nunca toca o disco — o arquivo vira um hash
.dat. O link de download usa um id de 128 bits (não-enumerável). - Signaling protegido: campos validados, payload limitado, e uma sala é de dois — um 3º dispositivo é recusado (anti-interceptação).
- Garbage collection: uma rotina apaga arquivos físicos e os registros expirados (hard-delete), mantendo o banco e o disco limpos.