Quanto à minha compreensão do TCP, afirmar " Manter as conexões TCP ativas " é enganoso, pois não há nenhum mecanismo específico do protocolo TCP lidando com o tempo limite, quando referido para conexões ESTABELECIDAS . Quero dizer: uma vez estabelecidos, eles podem durar para sempre, até que um RESET, um FIN ou um timeout no recebimento de um ACK (... após alguma transmissão para ser reconhecida, neste último caso) aconteça.
Quanto à minha experiência, 100% dos problemas " subitamente quebrados devido ao tempo limite inativo " dependem de algum roteador intermediário / firewall, ao longo do caminho de roteamento entre os dois hosts de comunicação. Quero dizer: como o firewall é tipicamente um firewall "statefull", ele monitora as conexões que ele está protegendo / gerenciando. Como tal, toda conexão que precisa rastrear significa algum grau de recursos do sistema (do firewall, quero dizer) para ser consumido. Além disso, o firewall sabe perfeitamente quais das conexões gerenciadas estão "funcionando" e quais delas, viceversa, estão "ociosas", devido à própria natureza do próprio firewall (é um firewall stateful !). Como tal, muitos (todos?) Das implementações de firewall têm um tempo limite definido e se as conexões gerenciadas estiverem ociosas para tal valor de tempo limite, o firewall envia uma redefinição para as duas extremidades (... da conexão TCP) e libera seus próprios recursos.
Com base na sua pergunta, aposto que a conexão TCP será aberta pelo seu dispositivo IoT (agindo como um cliente) versus seu servidor de controle (o servidor TCP). Portanto ... LOTES , se não ALL , do roteador doméstico ADSL que ativará o tráfego do dispositivo IoT, certamente funcionará conforme descrito.
Isso, pelo menos, com base na minha própria experiência.
Mas como eu não sou Jon Postel , por favor não me culpe se eu estiver errado :-)
Como uma nota lateral: você escreveu " ... MUITOS dispositivos IoT simples ... ". Por favor, tenha em mente que há um limite muito rígido no número de conexões TCP simultâneas que você pode manipular com seu servidor de um único servidor como .... A "porta" TCP é um valor de 16 bits. Portanto, para cada endereço IP, você não pode exceder (por design intrínseco de TCP) conexões de 64K. Como esses problemas podem ser resolvidos, está fora do escopo, no contexto desta questão.
Por fim, deixe-me acrescentar que realmente vejo um problema no ao implementar uma espécie de protocolo de heartbeat entre o dispositivo IoT e o servidor / aplicativo de gerenciamento. Ele pode ser implementado para ser muito "amigável à rede", sem impacto em termos de largura de banda e com lotes de vantagens, em termos de capacidade de gerenciamento / controle.