Io non sono esattamente che cosa sta chiedendo la tua domanda, ma suona come stai lottando con il fatto che avete bisogno di un ciclo di ascoltare per le connessioni client di selezionare sul tuo server, ma è necessario fare un lavoro utile. Allo stesso modo, nel vostro cliente, potreste avere bisogno di ascoltare per l'input, ma allo stesso tempo per aspettare le risposte dal server.
Non so quale lingua si sta utilizzando, ma ho fatto presente in PHP che mette un sottile involucro di circa il socket connessi in modo che le chiamate di sistema sono piuttosto simili. È generalmente necessario per decidere se fare una select () chiamata di blocco o no. se non il blocco, potrebbe essere la filatura nel suo ciclo principale, più volte chiamata select () senza alcun risultato e ancora masticare un sacco di tempo di CPU.
Si potrebbe decidere di selezionare un timeout dove () blocchi per 100 millisecondi o sobefore di decidere che non c'è nessun dato e continua a eseguire un altro codice. Questo tende a intaccare il rendimento della tua domanda perché ci potrebbero essere le cose si dovrebbe essere in corso, mentre il sonno è app.
Se questo è quello che la tua domanda è, si potrebbe voler verificare in che la vostra applicazione multi-threaded (o multiprocessing). Questo concetto si applica ad entrambi i server e client. Potete mantenere il vostro thread principale di lavoro, su richiesta via e delegato di I / O ad un thread separato e lasciare che il sistema operativo di prendersi cura di tutta la programmazione. L'I / O thread coda tutte le richieste di I / O e il thread principale si lealtà loro servizio, li consegna al I / O thread quando sono completi. Purtroppo, sono ancora alla ricerca di filettatura in me quindi non posso essere molto di ulteriore assistenza. Si può ottenere un po 'peloso, quando si tratta con multithreading o multiprocessing perché devi guardare le cose per come
condizioni di gara,
stallo, E una miriade di altri problemi di concorrenza connessi.