¡Gran anuncio!
He comenzado mi viaje de aprendizaje diario de Diseño de sistemas frontend. Y compartiré ideas de cada módulo en los blogs. Así que ¡aquí está el comienzo y hay mucho más por venir!
En este blog, exploraremos diferentes mecanismos de obtención de datos esenciales para el diseño de sistemas front-end, incluidos sondeos cortos, sondeos largos, WebSockets, eventos enviados por el servidor (SSE) y webhooks. Cada técnica aborda necesidades específicas para entregar datos hacia y desde el cliente y el servidor, y comprenderlas es crucial para diseñar aplicaciones web escalables en tiempo real.
El sondeo corto es un método en el que el cliente envía repetidamente solicitudes al servidor a intervalos regulares para buscar actualizaciones.
setInterval(async () => { const response = await fetch('/api/get-posts'); const data = await response.json(); // Update UI with new data }, 5000); // Poll every 5 seconds
Por ejemplo, ticker del mercado de valores, feeds de redes sociales
El sondeo largo es una mejora con respecto al sondeo corto, donde el cliente envía una solicitud y el servidor mantiene abierta la conexión hasta que tiene nuevos datos para devolver.
Desde el back-end, la respuesta se enviará solo cuando se actualicen los datos, hasta entonces retendrá la solicitud. Si no hay ninguna actualización durante mucho tiempo, se procesa el tiempo de espera.
Lado del cliente
async function subscribe() { let response = await fetch("/subscribe"); if (response.status == 502) { // Status 502 is a connection timeout error, let's reconnect await subscribe(); } else if (response.status != 200) { // An error - let's show it showMessage(response.statusText); // Reconnect in one second await new Promise(resolve => setTimeout(resolve, 1000)); await subscribe(); } else { // Get and show the message let message = await response.text(); showMessage(message); // Call subscribe() again to get the next message await subscribe(); } } subscribe();
Por ejemplo: chats de atención al cliente en vivo
WebSockets permite la comunicación full-duplex entre el cliente y el servidor, lo que lo convierte en el método más eficiente para la transferencia de datos en tiempo real.
El cliente abre una conexión WebSocket con el servidor y tanto el cliente como el servidor pueden enviarse mensajes entre sí a través de esta única conexión.
webSocket = new WebSocket(url, protocols); // Send message webSocket.send("Here's some text that the server is urgently awaiting!"); // Receive message webSocket.onmessage = (event) => { console.log(event.data); };
Por ejemplo: aplicaciones de chat en vivo, juegos multijugador en línea
SSE proporciona un flujo unidireccional de actualizaciones desde el servidor al cliente a través de una conexión HTTP.
const evtSource = new EventSource("ssedemo.php"); evtSource.onmessage = (event) => { const newElement = document.createElement("li"); const eventList = document.getElementById("list"); newElement.textContent = `message: ${event.data}`; eventList.appendChild(newElement); };
Por ejemplo: feeds, notificaciones
Los webhooks son un mecanismo de comunicación de servidor a servidor donde el servidor envía datos a una URL predefinida cuando ocurre un evento. El cliente no necesita seguir revisando el servidor en busca de actualizaciones.
Popular para desencadenar acciones entre sistemas, como notificaciones de pago, eventos de GitHub o integraciones de servicios de terceros.
La elección del método de comunicación correcto depende de los requisitos de su aplicación. WebSockets y SSE son perfectos para transmisión de datos y en tiempo real, mientras que el sondeo prolongado ofrece un equilibrio entre rendimiento y facilidad de uso. El sondeo breve es una solución sencilla para actualizaciones poco frecuentes, pero puede consumir muchos recursos, y los webhooks son ideales para notificaciones de servidor a servidor.
Cada técnica tiene sus propias ventajas y limitaciones. Comprenderlos puede ayudarle a tomar decisiones informadas para crear aplicaciones web eficientes y responsivas.
¡Este blog está abierto a sugerencias y debates!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3