Sto sviluppando un'applicazione che deve essere eseguita su un massimo di migliaia di sistemi client che controllo (Linux) e che sono connessi a dispositivi Internet NAT pubblici. Ciascuno di questi dispositivi client deve ricevere messaggi non frequenti da un servizio cloud (1 o 2 al giorno) e, in media, deve ricevere questi messaggi in meno di 500 ms.
Ho il pieno controllo dei sistemi sia server che client per installare qualsiasi sistema operativo, linguaggi di programmazione o applicazioni. Tuttavia non avrò il controllo del router e della rete in mezzo. Altrimenti, potrei semplicemente chiamare un servizio web in esecuzione sui dispositivi "client" per inviare i messaggi.
Ho preso in considerazione l'esecuzione di Node.js sul servizio cloud, con i socket javascript sul client mantenuti aperti 24x7. Da quello che mi è stato detto, Node può gestire decine di migliaia di connessioni aperte, rendendolo un server ideale per questo.
I dispositivi NAT interrompono le connessioni aperte, quindi è possibile inviare dati permanenti manichino. E se la connessione viene interrotta, il client si limita a rinnovare il socket.
Altre opzioni includono Erlang o anche un semplice socket c con polling lungo.
Tuttavia sto attraversando un momento difficile per cercare questo problema per altri approcci.
Quale sarebbe l'approccio migliore? Non ci sono restrizioni sulla lingua o programmazione.