PDA

View Full Version : C# - gestire tanti socket TCP


x-t
12-08-2012, 18:23
Buonasera.
Devo realizzare un'applicazione che interroga 100 dispositivi su rete locale (via protocollo Modbus TCP)... una sorta di polling, dal primo al centesimo ciclicamente all'infinito.
Diciamo che ogni ciclo completo impiega circa 2 minuti.

Qual'č la maniera pių efficiente di gestire i socket in questo caso?
Opzione 1
-apro la connessione TCP
-interrogo il dispositivo
-Chiudo la connessione TCP
-Passo al prossimo dispositivo e cosė via

Opzione 2
-Apro tutte e 100 le connessioni TCP e non le chiudo pių (e mi occupo di gestire eventuali errori di comunicazione dovuti a connessione che si sono chiuse per problemi vari)


Si accettano tutti i consigli :)

MarcoGG
13-08-2012, 13:10
...
Opzione 2
-Apro tutte e 100 le connessioni TCP e non le chiudo pių (e mi occupo di gestire eventuali errori di comunicazione dovuti a connessione che si sono chiuse per problemi vari)


Proverei con questa, e non dall'unico Thread ( UI ) chiamante, bensė gestendola in multi-Threading...

tacchinox
16-08-2012, 22:02
C'e' la libreria nModbus che e' molto utilizzata, oppure per roba piu' complessa di solito si usa un Opc Server, che si occupa lui del polling e multithreading e te devi solo consumare i dati dalla cache.
Su 100 socket non so come siano le performance, fa un po' di prove. Dipende molto dall'applicazione, dalla criticita' dei dati, da che tempi di refresh vuoi etc...

DooM1
20-08-2012, 14:52
Boh io farei a gruppi, di 10 per esempio.
Ma bisogna anche valutare cosa deve succedere se un host ritarda la risposta, o se non risponde per niente. In quel caso blocca ritarda il polling degli altri, č accettabile?

x-t
01-09-2012, 15:16
Grazie per i suggerimenti :)
Il suggerimento di DooM1 sembra la via di mezzo migliore :)
Il ritardo sul polling non sarebbe neanche un problema perchč posso impostare i timeout :)