Ho bisogno di scrivere un server che accetta connessioni da più macchine client, mantiene traccia dei client connessi e invia i dati dei singoli client secondo necessità. A volte, tutti i client possono essere contattati contemporaneamente con lo stesso messaggio, altre volte, può essere un singolo cliente o un gruppo di clienti.Connessioni prese multiple
Poiché ho bisogno di confermare che i client abbiano ricevuto le informazioni e non vogliano costruire una struttura ACK per una connessione UDP, ho deciso di utilizzare un metodo di streaming TCP. Tuttavia, ho faticato a capire come mantenere più connessioni e mantenerle inattive.
Mi sembra di avere tre opzioni. Utilizzare un fork per ogni connessione in ingresso per creare un processo figlio separato, utilizzare pthread_create per creare un thread interamente nuovo per ogni processo o utilizzare select() per attendere su tutti gli ID socket aperti per una connessione.
Raccomandazioni su come attaccare questo? Ho iniziato a lavorare con i pthread, ma dal momento che le prestazioni probabilmente non saranno un problema, l'elaborazione multicore non è necessaria e forse c'è un modo più semplice.
Come nota, sto lavorando in C/C++ – BSchlinker
Vorrei anche ricordare che il numero di connessioni a questo sistema è statico. Questa non è una macchina pubblica (le connessioni non cambieranno nel tempo, ad esempio, non vedo problemi di prestazioni come un problema). – BSchlinker
Personalmente, vorrei usare multiplex usando select(), o preferibilmente kqueue() se in esecuzione su mac o bsd. Entrambe le tre opzioni funzionerebbero, tuttavia, e le opzioni pthread/fork sono semplicissime da implementare se il tuo server avrà un basso numero di client e un basso contenimento attivo del client. –