respuesta Corto
Mantener un WebSocket activo tiene un costo, tanto para el cliente y el servidor, ya sea Ajax tendrá un costo de una sola vez, dependiendo de lo que estás haciendo con él.
Respuesta larga
websockets están a menudo mal entendido debido a este conjunto "Hey, utilizar Ajax, que va a hacer!". No, Websockets no reemplazan a Ajax. Pueden aplicarse potencialmente a los mismos campos, pero hay casos en los que usar Websocket es absurdo.
Tomemos un ejemplo simple: una página dinámica que carga datos después de que la página se carga en el lado del cliente. Es simple, haz una llamada Ajax. Solo necesitamos una dirección, del servidor al cliente. El cliente pedirá estos datos, el servidor los enviará al cliente, listo. ¿Por qué implementaría websockets para tal tarea? No necesita que su conexión esté abierta todo el tiempo, no necesita que el cliente pregunte constantemente al servidor, no necesita que el servidor notifique al cliente. La conexión permanecerá abierta, desperdiciará recursos, porque para mantener una conexión abierta, debe verificarla constantemente.
Ahora para una aplicación de chat las cosas son totalmente diferentes. Necesita que su cliente sea notificado por el servidor en lugar de forzar al cliente a preguntarle al servidor cada x segundos o milisegundos si algo es nuevo. No tendría sentido.
Para entender mejor, vea eso como dos personas. Uno de los dos es el servidor, el final es el cliente. Ajax es como enviar una carta. El cliente envía una carta, el servidor responde con otra letra. El hecho es que, para una aplicación de chat de la conversación sería así:
"Hey Server, tiene algo para mí
- No.
- Hey Server, tiene algo para mí
- No.
?? - Hola servidor, ¿tengo algo para mí?
- Sí, aquí está ".
El servidor no puede enviar una carta al cliente, si el cliente nunca solicitó una respuesta. Es una gran pérdida de recursos. Porque por cada solicitud de Ajax, incluso si está almacenada en caché, debe realizar una operación en el lado del servidor.
Ahora el caso que discutí anteriormente con los datos cargados con Ajax. Imagine que el cliente está hablando por teléfono con el servidor. Mantener la conexión activa tiene un costo. Cuesta electricidad y tienes que pagarle a tu operador. Ahora, ¿por qué necesitarías llamar a alguien y mantenerlo en el teléfono durante una hora, si solo quieres que esa persona te diga 3 palabras? Envía una maldita carta.
En conclusión ¡Websockets no es un reemplazo total para Ajax!
A veces lo hará necesita Ajax, donde el uso de Websocket es absurdo.
Editar: El caso SSE
que la tecnología no se utiliza muy ampliamente, pero puede ser útil. Como su nombre lo indica, los eventos enviados por el servidor son un envío de un solo sentido desde el servidor al cliente. El cliente no solicita nada, el servidor simplemente envía los datos.
En resumen:
- unidireccional desde el cliente: Ajax
- unidireccional desde el servidor: SSE
- Bidireccional: websockets
Creo que esto es correcto. En aplicaciones donde no necesita comunicación bidireccional, las solicitudes de ajax serán mucho más sencillas en el servidor. Además, considere que cuando la persistencia fuera de línea HTML5 esté disponible (básicamente al mismo tiempo que los websockets estén más disponibles) las aplicaciones web solo se sincronizarán con el servidor según sea necesario. – badunk