petterg Skrevet 28. januar 2012 Del Skrevet 28. januar 2012 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
etse Skrevet 29. januar 2012 Del Skrevet 29. januar 2012 En form for messagepassing system kan være veien å gå. Hva med å f.eks. implementere en "RESTfull" kommunikasjon via HTTP-protokollen for å sende over beskjeder og filer? Lenke til kommentar
petterg Skrevet 29. januar 2012 Forfatter Del Skrevet 29. januar 2012 Kanskje det, ja. Ellers så fant jeg et eksempel som ser ut til å ha de funksjonene som trengs. Koden er fra 2001, og trenger en liten gjennomgang for å la seg kompilere med dagens kompilator. Hvis den funker må det jo være mulig å forstå hvordan den er implementert. http://www.dwgold.com/Projects/Networking/Chatserver/Default.aspx Lenke til kommentar
oelbox Skrevet 29. januar 2012 Del Skrevet 29. januar 2012 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
petterg Skrevet 29. januar 2012 Forfatter Del Skrevet 29. januar 2012 Det er jo et poeng. Hvilken løsning anbefaler du når det er mange tilkoblinger? Lenke til kommentar
etse Skrevet 29. januar 2012 Del Skrevet 29. januar 2012 (endret) 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 29. januar 2012 av etse Lenke til kommentar
oelbox Skrevet 29. januar 2012 Del Skrevet 29. januar 2012 Det er jo et poeng. Hvilken løsning anbefaler du når det er mange tilkoblinger? netty, Grizzly,Naga, Mina er vel alle kandidater å vurdere. Lenke til kommentar
petterg Skrevet 29. januar 2012 Forfatter Del Skrevet 29. januar 2012 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå