Risposta breve
Mantenere un websocket attiva ha un costo, sia per il client e il server, se l'Ajax avrà un costo solo una volta, a seconda di quello che stai facendo con esso.
lungo risposta
WebSockets sono spesso frainteso a causa di tutto questo "Ehi, utilizzare Ajax, che farà!". No, Websockets non sostituisce Ajax. Possono potenzialmente essere applicati agli stessi campi, ma ci sono casi in cui l'uso di Websocket è assurdo.
Facciamo un semplice esempio: una pagina dinamica che carica i dati dopo che la pagina è stata caricata sul lato client. È semplice, effettua una chiamata Ajax. Abbiamo solo bisogno di una direzione, dal server al client. Il cliente chiederà questi dati, il server li invierà al client, fatto. Perché dovresti implementare websocket per tale compito? Non è necessario che la connessione sia sempre aperta, non è necessario che il client chieda costantemente al server, non è necessario che il server comunichi il client. La connessione rimarrà aperta, sprecherà risorse, perché per mantenere aperta una connessione è necessario controllarla costantemente.
Ora per un'applicazione di chat le cose sono completamente diverse. È necessario che il client venga avvisato dal server invece di forzare il client a chiedere al server ogni x secondi o millisecondi se qualcosa è nuovo. Non avrebbe senso
Per capire meglio, vedere come due persone. Uno dei due è il server, l'over è il client. Ajax è come inviare una lettera. Il client invia una lettera, il server risponde con un'altra lettera. Il fatto è che, per un'applicazione di chat la conversazione sarebbe stato così:
"Hey Server, ha qualcosa per me
- No.
- Ehi Server, ha qualcosa per me
- No.
?? - Ehi Server, ho qualcosa per me?
- Sì, eccolo. "
Il server non può effettivamente inviare una lettera al client, se il client non ha mai chiesto una risposta. È un enorme spreco di risorse. Perché per ogni richiesta Ajax, anche se è memorizzata nella cache, è necessario eseguire un'operazione sul lato server.
Ora il caso ho discusso in precedenza con i dati caricati con Ajax. Immagina che il client sia al telefono con il server. Mantenere attiva la connessione ha un costo. Costa elettricità e devi pagare il tuo operatore. Ora, perché dovresti chiamare qualcuno e tenerlo al telefono per un'ora, se vuoi che quella persona ti dica 3 parole? Manda una dannata lettera
In conclusione Websockets non è un sostituto totale per Ajax!
A volte è necessario necessario Ajax in cui l'utilizzo di Websocket è assurdo.
Edit: Il caso SSE
che la tecnologia non viene utilizzata molto ampiamente, ma può essere utile. Come dice il nome, gli eventi inviati dal server sono una spinta unidirezionale dal server al client. Il client non richiede nulla, il server invia solo i dati.
In breve:
- unidirezionale dal client: Ajax
- unidirezionale dal server: SSE
- bidirezionale: WebSockets
Credo che sia giusto. Nelle applicazioni in cui non è necessaria la comunicazione bidirezionale, le richieste di ajax saranno molto più semplici sul server. Inoltre, considera che quando la persistenza offline HTML5 diventa disponibile (praticamente nello stesso momento in cui i websocket diventano più disponibili), le applicazioni web si sincronizzano con il server solo se necessario. – badunk