Notificaciones
¿Qué es un WebSocket?
WebSocket es un protocolo de red basado en TCP que establece cómo deben intercambiarse datos entre redes. Puesto que es un protocolo fiable y eficiente, es utilizado por prácticamente todos los clientes. El protocolo TCP establece conexiones entre dos puntos finales de comunicación, llamados sockets. De esta manera, el intercambio de datos puede producirse en las dos direcciones.
En las conexiones bidireccionales, como las que crea WebSocket (a veces también websocket o web socket), se intercambian datos en ambas direcciones al mismo tiempo. La ventaja de este intercambio es que se accede de forma más rápida a los datos. En concreto, WebSocket permite así una comunicación directa entre una aplicación web y un servidor WebSocket. En otras palabras: la web que se solicita se muestra en tiempo real.
Socket.io
Socket.IO es una biblioteca basada en eventos para aplicaciones web en tiempo real que permite crear websockets.
Configuración de un proyecto con Socket.io y Express.js
Para realizar de manera exitosa la implementación del websocket para notificaciones, es necesario instalar las siguientes librerías:
- Express
- Socket.io
- Nodemon (opcional)
Correr el siguiente comando
npm install express socket.io nodemon
Server - Backend
Importar Módulos
En esta parte del código se importan las librerías necesarias para crear el servidor y manejar las conexiones del websocket
Crear Servidor Web
Con express creamos el servidor, posteriormente se configura el socket.io para trabajar con el servidor previamente creado (facilitar la comunicación entre el cliente y servidor) y con cors se permite que solo aquellos que cuenten con ese origin resource tengan acceso al servidor.
Conexión con cliente
- io - el servidor
- io.on(“connection”...) - se llama el método cuando un cliente se conecta al servidor
- io.on() - método del servidor de socket.io para escuchar eventos
- socket.emit() - método del servidor de socket.io para enviar datos a través de cierto evento. Recibe dos parámetros: el primero de ellos es el nombre del evento al que se va a asociar la información y el segundo es la información que se manda.
Inicializar y escuchar en el puerto 3000
App - Frontend
Conexión con el backend
Se realiza la conexión websocket del cliente con el servidor y se obtiene “notificationList” del html, donde se mostrará la información que mande el servidor.
Recibir el mensaje del servidor
Recordemos que el método socket.on() estamos escuchando un evento, en este caso el evento “notification”, mismo al que el servidor está enviando información. Cuando se recibe la información que viene del servidor, se renderiza en el DOM.
HTML
Se debe hacer uso del cdn para importar la librería de socket.io
Mostrar la notificación
En esta parte se encuentra el “notificationList” que usamos en el frontend para mostrar en pantalla la información proveniente del servidor.
Resumen
El cliente crea una conexión al backend a través de un websocket. Al establecer la conexión, el servidor emite un mensaje y lo suscribe a un evento. El cliente recibe este mensaje asociado al evento que está escuchando para finalmente renderizar la información en el DOM y el usuario vea la información en su pantalla.
Detalles importantes
- Existen múltiple métodos adicionales dentro de la librería de socket.io así como otros eventos para diferentes situaciones (como verificar el momento en que se pierde la conexión)
- El servidor de socket.io se puede configurar aún más, incluso creando headers adicionales para permitir que solo ciertos usuarios puedan visualizar la información que se manda.
- Se recomienda visualizar la documentación para realizar una implementación más completa y adaptada a las necesidades del proyecto.