Qualsiasi moderno server singolo è in grado di gestire migliaia di client contemporaneamente . Il suo software server HTTP deve solo essere orientato agli eventi (IOCP) (non siamo più nella vecchia connessione Apache una connessione = un'equazione thread / processo più). Anche il server HTTP integrato in Windows (http.sys) è orientato all'IOCP e molto efficiente (in esecuzione in modalità kernel). Da questo punto di vista, non ci sarà molta differenza nel ridimensionamento tra WebSocket e la normale connessione HTTP. Una connessione TCP / IP utilizza una piccola risorsa (molto meno di un thread) e i sistemi operativi moderni sono ottimizzati per gestire molte connessioni simultanee: WebSocket e HTTP sono solo protocolli di livello applicazione OSI 7, ereditati da queste specifiche TCP / IP.
Ma, dall'esperimento, ho riscontrato due problemi principali con WebSocket:
- Non supportano la CDN;
- Hanno potenziali problemi di sicurezza.
Quindi consiglierei quanto segue, per qualsiasi progetto:
- Usa WebSocket solo per le notifiche dei client (con un meccanismo di fallback per il polling lungo - ci sono molte librerie in giro);
- Utilizzare RESTful / JSON per tutti gli altri dati, utilizzando un CDN o proxy per la cache.
In pratica, le applicazioni WebSocket complete non si adattano bene. Basta usare WebSocket per quello per cui sono stati progettati: inviare notifiche dal server al client.
Informazioni sui potenziali problemi dell'utilizzo di WebSocket:
1. Considerare l'utilizzo di una CDN
Oggi (quasi 4 anni dopo), il ridimensionamento web implica l'utilizzo di front-end Content Delivery Network (CDN), non solo per i contenuti statici (html, css, js) ma anche per i dati dell'applicazione (JSON) .
Naturalmente, non inserirai tutti i tuoi dati nella cache della CDN, ma in pratica molti contenuti comuni non cambieranno spesso. Ho il sospetto che l'80% delle tue risorse REST possa essere memorizzato nella cache ... Anche un timeout di scadenza CDN di un minuto (o 30 secondi) potrebbe essere sufficiente per dare al tuo server centrale un nuovo live e migliorare molto la reattività dell'applicazione, dal momento che CDN può essere geograficamente sintonizzato ...
Per quanto ne sappia, non esiste ancora alcun supporto WebSocket nella CDN e sospetto che non lo sarebbe mai stato. WebSocket sono statefull, mentre HTTP è senza stato, quindi è molto facilmente memorizzato nella cache. In effetti, per rendere WebSockets compatibile con CDN, potrebbe essere necessario passare a un approccio RESTful senza stato ... che non sarebbe più WebSocket.
2. Problemi di sicurezza
I WebSocket presentano potenziali problemi di sicurezza, in particolare sugli attacchi DOS. Per informazioni sulle nuove vulnerabilità di sicurezza, vedere questo set di diapositive e questo ticket Webkit .
I WebSocket evitano qualsiasi possibilità di ispezione dei pacchetti a livello di applicazione OSI 7, che al giorno d'oggi è abbastanza standard, in qualsiasi sicurezza aziendale. In effetti, WebSocket rende la trasmissione offuscata, quindi potrebbe essere una grave violazione della perdita di sicurezza.