Jag är inte riktigt säker på vad din fråga är att be, men det låter som du brottas med det faktum att man behöver en slinga för att lyssna till klientanslutningar med att välja på servern men du måste också göra nyttigt arbete. Likaså i din klient, kanske du måste lyssna på signaler från användaren, men samtidigt väntar på svar från servern.
Jag vet inte vilket språk du använder, men jag har gjort det i PHP som sätter en tunn wrapper runt socket-relaterade system samtal så de är ganska lika. Du generellt behov av att besluta om att välja () samtal blockerande eller inte. om det inte blockerar du kanske att snurra i ditt viktigaste loop upprepade gånger ringer väljer () utan resultat och ändå tuggar upp massor av CPU-tid.
Du kan besluta om en timeout där väljer () block för 100 millisekunder eller sobefore besluta att det inte finns några uppgifter och fortsätter att köra annan kod. Detta tenderar att underminera resultatet för din ansökan, eftersom det kan finnas saker som du bör gå medan din app sover.
Om det är vad din fråga handlar om, kanske du vill kontrollera att göra din ansökan flera gängade (eller multi). Detta skulle gälla för både server och klient. Du kan hålla dina viktigaste konversation arbeta bort på begäran och delegera I / O till en separat tråd och låta operativsystemet tar hand om all planering. De I / O-konversation kommer köa upp alla I / O-begäran och de viktigaste konversation kommer plikttroget tjänst dem, lämna dem till I / O-tråd när de är färdiga. Tyvärr är jag fortfarande letar i gäng mig så jag kan inte vara mycket mer hjälp. Det kan bli lite hårig när du handskas med multitrådning eller multi eftersom du måste se upp för saker som
ras villkor,
dödlägeOch en mängd andra concurrency-relaterade problem.