Normalmente, la comunicación servidor-cliente funciona así: el cliente envía alguna solicitud (GET, DELETE, PATCH, etc.) y el servidor responde al cliente con algunos datos. ¿Es posible lograr que el servidor envíe los datos al cliente sin que el cliente envíe la solicitud primero? Para ser más específico, quiero crear una aplicación de sala de chat. Entonces, cuando A envía un mensaje a B, A enviará una solicitud al servidor (junto con ese mensaje), pero B lo sabe, por lo tanto, B no quiere solicitar todos los mensajes de B del servidor. Entonces, ¿cómo se puede notificar a B en este caso?
Sin que se haya enviado ninguna información recientemente, esto solo sería posible si hay una ruta directa confiable al cliente, y el cliente también es un servidor que puede escuchar las solicitudes. Este enfoque probablemente solo funcionará para clientes con sus propias direcciones IP estáticas estables, y no para el cliente promedio de Internet detrás de NAT de nivel de operador.
Pero si el cliente puede establecer una conexión inicial con el servidor cuando la aplicación del cliente se conecta, lo cual es extremadamente típico de las aplicaciones similares a las que está describiendo, puede configurar una conexión websocket en ese punto, lo que permite que tanto el cliente como el servidor para enviar información entre sí.
Cree una conexión websocket al servidor cuando el cliente se conecte. Luego, cuando el servidor ve un cambio en el mensaje que desea comunicar a los clientes, el servidor puede iterar sobre todos los websockets aún activos (o, si lo desea, solo los websockets aún activos que también necesitan actualizarse en respuesta al mensaje) y enviar un mensaje a través de cada uno de ellos, y cada cliente conectado puede ver el mensaje del servidor.