Klient & Server kommunikation, flertrådet?

Tags:    threads cpp client server

I forlængelse af min forrige tråd, kommer jeg her med et nyt spørgsmål. Jeg er nemlig stødt ind i det problem at min server ikke kan kommunikere med klienten uden at klienten selv har taget initiativet.

Selvfølgelig tager klienten det første initiativ og tilslutter sig serveren, men defra skulle data gerne kunne "flyde" mellem de to parter, uden at klienten, som sagt, skal tage initiativet.

Først tænkte jeg på at have en to-trådet kommunikationsobjekt der har en send og en receive del der kører på hver sin tråd, men er det overhovedet muligt at læse og skrive til en socket samtidigt? Eller skal jeg i gang med noget simpelt Mutex locking?

Glæder mig til at høre alle jeres kloge svar,
Jakob.



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Ja, samtidig.
Jeg selv foretrækker et IO loop hvor én tråd står for al IO, og så bruge non-blocking sockets, for at undgå, at to tråde forsøger at sende på samme socket samtidig. Det kan de godt, så vil den ene bare blive blokkeret af operativsystemet, til den anden er færdig, men jeg kan bare godt lide at have separere trådenes ansvar fuldstændig.
Så jeg gør faktisk ca. det samme som Node.js



Ja, den er ikke lige helt nem. Hvordan håndterer du dine clients på serveren?



Jeg håndterer dem asynkront med node.js, har en "client-instance" som håndterer hver enkelt klient. Serveren kan på et hvilket som helst tidspunkt få besked på (fra nogle "viewer-klienter") at sende data til mine andre klienter (dem som jeg har beskrevet før).



Du kan godt sende og modtage på en socket fra to tråde samtidig, så det vil helt sikkert være den nemmeste måde at gøre det på klienten.



@Robert: Samtidigt? Kunne jeg have to tråde til både at sende og modtage, eller er der et andet designpattern jeg burde gå efter?



t