La importancia del keepalive en conexiones permanentes
En mi trabajo desarrollamos una plataforma de Digital Signage basada en el protocolo XMPP. Los «players» establecen conexiones permanentes al servidor y éste les manda órdenes (play, stop, actualización de vídeos…)
Un cliente nos llamó informándonos de que su player había dejado de funcionar, que no respondía. Examinando con Wireshark, comprobé que la conexión se cortaba (RST, reset). Desde el servidor, con ejabberdctl
, podía ver que ocurría exactamente a los 67 segundos. Sabiendo que esto era un comportamiento nuevo, supuse que el causante era alguna actualización o configuración reciente en su firewall.

Instalé una versión del software del player posterior, que incorpora un «keepalive» dentro de XMPP, con un espacio en blanco. Esto solucionó el problema. La conexión se mantenía. Como comentario, esto también se podría hacer a nivel de TCP, que asimismo dispone de un mecanismo de keepalive.