Gå til innhold

Kommunikasjon mellom netverksklienter


Anbefalte innlegg

Er i startfasen på et prosjekt hvor jeg ser en utfordring komme.

 

Et serverprogram (java) fyrer igang en thread som vil lytte på en nettverksport.

Når en klient kobler til fyres en ny thread som skal håndtere kommunikasjon med klienten.

 

Hvordan kan man i den situasjonen få serveren til å videresende meldinger fra en klient til en annen? Det blir altså behov for at to threads skal utveksle informasjon.

 

F.eks:

En klient kobler til, får opprettet forbindelse og logger inn med brukernavn A.

En annen klient kobler til, får opprettet forbindelse og logger inn med brukernavn B.

Så sender klienten med bruker A en melding til server som skal sendes til klienten med brukernavn B. Hvordan bør det løses?

 

For å få det til må altså serveren først finne ut hvilken thread som betjener forbindelsen med brukernavn B, og deretter må meldingen tas imot og sendes videre.

Og hva om denne meldingen f.eks er en stor fil? Da ønsker man kanskje å opprette en datastream hvor alle data går direkte fra den ene forbindelsen og ut på den andre. Hvordan kan det løses? (Ikke at jeg har behov for slik streaming denne gangen, men det er et naturlig oppfølginspørsmål av ren nysgjerrighet.)

 

Jeg fikk en ide om at Threadgroups kan være en vei å gå, men har aldri brukt dette før, så det kan være et blindspor.

Lenke til kommentar
Videoannonse
Annonse

Nå vet ikke jeg hvor mange klienter du ser for deg koble seg til serveren din, men en thread pr. tilkobling skalerer dårlig. Dette er selfølgelig ikke noe problem om du forventer kun et fåtall klienter, men er det snakk om mange tilkoblede klienter kommer du fort opp i morsomme problemer med en slik arkitektur.

Lenke til kommentar

Hva med å ta i bruk events? Slik at hver gang du mottar data fra en åpen tilkobling så blir det raiset et event, og så behandler du de fortløpende?

Edit: eller på en eller annen måte ta i bruk Asynkrone sockets :)

Endret av etse
Lenke til kommentar

Takk for innspill.

 

Jeg skal lese om Naga før jeg starter å skrive kode. Ved første øyekast var det den som virket mest fristende av forslagene.

 

Koden på dwgold-linken virker også ganske fornuftig. Hvis jeg leste den rett, sparker den igang en ny tråd når det kommer data fra en klient, og stopper tråden når den er ferdig å behandle de data som kom.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...