WebSocket consente la comunicazione bidirezionale persistente tra client e server. Chat, notifiche in tempo reale, giochi, WebSocket è fondamentale. Questa guida mostra come implementarlo nelle app mobili.
Cos'è WebSocket
Definizione
Protocollo di comunicazione full duplex su TCP.
Contro HTTP
HTTP: richiesta/risposta. WebSocket: connessione persistente.
Porta
Utilizza 80/443 (ws:// e wss://).
Bidirezionale
Il server può inviare al client senza richiesta.
Quando usarlo
Chatta
Messaggistica istantanea.
Notifiche
Aggiornamenti in tempo reale.
Collaborazione
Modifica da parte di più utenti.
Giochi
Stato sincronizzato.
Cruscotti
Metriche in tempo reale.
###IoT
Comunicazione con i dispositivi.
Come funziona
Stretta di mano
Aggiornamento da HTTP a WebSocket.
Connessione
Connessione persistente stabilita.
Cornici
Dati inviati come frame.
###Chiudi
Chiusura graziosa.
Implementazione del back-end
Node.js
ws, Socket.io.
Pitone
websocket, canali Django.
Vai
GorillaWebSocket.
Rubino
ActionCable (Binari).
Gestito
Pusher, Abilmente, Firebase.
Presa.IO
Di cosa si tratta
Libreria che astrae WebSocket.
Fallback
Polling se WebSocket non è disponibile.
###Camere
Raggruppamento delle connessioni.
Spazi dei nomi
Separazione logica.
Eventi
API basata su eventi.
Implementazione mobile
###iOS
URLSessionWebSocketTask. Starscream.
###Android
OkHttpWebSocket.
Reagisci in modo nativo
react-native-websocket, client Socket.io.
Svolazzare
web_socket_channel, socket_io_client.
Gestione della connessione
###Riconnessione
Riconnettersi automaticamente.
###Battito cardiaco
Ping/pong per restare in vita.
Stato
Tieni traccia dello stato della connessione.
Coda offline
Metti in coda i messaggi quando sei disconnesso.
Autenticazione
Gettone nella stretta di mano
Invia token di autenticazione.
Verifica
Il server convalida prima di accettare.
###Aggiorna
Gestione della scadenza dei token.
Scalabilità
Problema
Le connessioni persistenti consumano risorse.
Sessioni permanenti
Utente sempre sullo stesso server.
Pub/Sub
Redis per la comunicazione tra server.
Bilanciamento del carico
Bilanciatore Layer 7 con supporto WebSocket.
Alternative
Eventi inviati dal server (SSE)
Unidirezionale. Server→cliente.
Sondaggio lungo
Simula il tempo reale con HTTP.
Abbonamenti GraphQL
WebSocket in GraphQL.
Firebase in tempo reale
Soluzioni gestite.
Casi d'uso dettagliati
Chatta
- Connessione persistente
- Indicatori di digitazione
- Leggere le ricevute
- Presenza
Aggiornamenti in tempo reale
- Metriche del dashboard
- Risultati sportivi
- Quotazioni azionarie
- Aggiornamenti dei feed
Multigiocatore
- Sincronizzazione dello stato del gioco
- Posizioni dei giocatori
- Azioni trasmesse
Migliori pratiche
Logica di riconnessione
Backoff esponenziale.
###Battito cardiaco
Mantieni viva la connessione.
Formato del messaggio
JSON o binario.
Compressione
Perframe-sgonfiare.
###Sicurezza
WSS (TLS) richiesto.
Debug
Strumenti di sviluppo del browser
La scheda Rete mostra i frame.
wscat
Strumento CLI da testare.
Registrazione
Registra connessione, disconnessione, messaggi.
##Prestazioni
Connessioni
Limite per utente.
Dimensioni del carico utile
Ridurre al minimo i dati.
Raggruppamento
Raggruppare i messaggi quando possibile.
###Binario
Più efficiente di JSON per il volume.
Errori comuni
Non riconnettersi
La connessione si interrompe, l'app si blocca.
Perdite di memoria
Ascoltatori non rimossi.
Nessuna autenticazione
Connessioni senza autenticazione.
Ignora le disconnessioni
Non gestire lo stato offline.
Specifico per dispositivi mobili
Sfondo
La connessione si chiude in background.
Batteria
Le connessioni persistenti consumano la batteria.
Modifiche alla rete
WiFi → il cellulare richiede la riconnessione.
Spingi il fallback
Utilizza push quando WebSocket non è disponibile.
Conclusione
WebSocket è essenziale per le funzionalità in tempo reale. Implementare una riconnessione robusta, un'autenticazione adeguata e considerare l'impatto sulla batteria del dispositivo mobile. In molti casi, i servizi gestiti semplificano.
##Domande frequenti
1) WebSocket è migliore del polling? Per il tempo reale, sì. Meno spese generali.
2) Firebase sostituisce WebSocket? In molti casi sì. È gestito WebSocket.
3) WebSocket funziona in background mobile? Limitatamente. Usa push per lo sfondo.
4) Quante connessioni può gestire un server? Dipende. Da migliaia a centinaia di migliaia con la messa a punto.
5) WebSocket o SSE? WebSocket per bidirezionale. SSE solo per server → client.
Leggi anche
- Backend per applicazioni: architettura, tecnologie e best practice
- GraphQL per applicazioni: Guida all'implementazione
- Microservizi nelle applicazioni: architettura distribuita per dispositivi mobili
- Backend per applicazioni - Buone pratiche per la scalabilità
- Backend per le applicazioni - Buone pratiche per startup
- Architettura dell'applicazione: fondamenti e modelli essenziali