Estoy desarrollando una aplicación donde un servidor necesita mantenerse en contacto con muchos dispositivos IoT simples. Casi no se necesita intercambio de información entre el servidor y cada dispositivo, pero los dispositivos necesitan permanecer en línea y accesibles por el servidor las 24 horas. En algún momento (que ocurre muy raramente) el servidor necesita poder ponerse en contacto con uno de los dispositivos e intercambiar algunos mensajes: es crucial, sin embargo, que esos dispositivos sean accesibles en cuestión de muy poco tiempo.
Esto significa que necesito que esos dispositivos cliente estén de alguna manera conectados continuamente. Ahora, me pregunto: ¿es factible simplemente conectar esos dispositivos a través de TCP y mantener esas conexiones activas para estar siempre listos para intercambiar mensajes?
He intentado leer alrededor y siempre leo la misma respuesta: depende de tu implementación, ya que es muy probable que tu intercambio y procesamiento de mensajes sea el cuello de botella en lugar de mantener esas conexiones TCP activas. Ahora, este no es realmente mi caso, ya que solo necesito intercambiar una cantidad muy limitada de información cada mucho tiempo.
Entonces, ¿es razonable mantener conectados a esos clientes? ¿O debería idear un método más eficiente? Por ejemplo, ¿cuánto ancho de banda se requiere para mantener viva una conexión TCP sin ningún intercambio de datos? ¿Y esto requiere una cantidad significativa de memoria o CPU?
Implementé un programa simple en C++ que envía mantener conexiones UDP al servidor cada algunos segundos: según mis pruebas, esto puede escalar hasta varios millones de dispositivos en línea sin ningún problema, incluso en un servidor razonablemente limitado. ¿TCP funcionará peor que eso?