Avatar billede onkel_satan Nybegynder
18. oktober 2006 - 15:13 Der er 4 kommentarer og
1 løsning

Flyt klienter til hver deres thread

Ja så kom det naeste problem u mit lille client/server program.

Ind til videre har jeg en server som har en singleton channel åben som tager imod klienter der connecter til servceren. Ideen er så at to klienter kan vaelge at spille (programmet er et spil) mod hinanden. Disse to klienter vil jeg saa have 'flyttet' over i en thread for sig selv hvor deres spil saa kan afvikles. Men jeg har ingen aning om hvordan jeg flytter to connection/klienter over i en thread for sig selv. Når spillet er slut skal de saa returneres til serverens 'main' for så at starte et myt spil om de vil.
Et lilel senario kunne være:
Server S
Klient k1
Klient k2
Klient k3
Klient k4

Alle fire klienter kobler op til S (Så langt er jeg kommet nu) hvor de kan se hinanden.
k1 og k2 vælger så at spille mod hinanden og ligeledes med k3 og k4
Jeg vil saa have S til at spawne to threads, en til hvert spil.

Nogen ide om hvad jeg skal bruge/gøre for at det kan lade sig gøre ? Links, ekspemler ovs. er mere end velkommen. Har søgt og søgt på google, men kan ikke finde nogen artikler om ovenstående problem.
Avatar billede md_craig Nybegynder
19. oktober 2006 - 13:55 #1
Det kommer ikke til at være ret sundt for serveren at spawne tråde for hvert spil... det er typisk ikke anbefaleligt at komme over 25 tråde per process...

Men hvad er lige grunden til at de skal ligge i hver sin tråd?...

Selv klarede jeg det en gang ved at hægte 2 spillere der ønskede at spille mod hinanden op på et object... og så lod jeg dem kommunikere derigennem...

Og så blev der istedet oprettet tråde til hvert callback
Avatar billede onkel_satan Nybegynder
22. oktober 2006 - 06:51 #2
Min adgang til internettet er for tiden begraenset, derfor jeg reager lidt langsomt.
Har taget dit råd til mig, men jeg har bare et andet problem nu.

Jeg har min GameLobby klasse om alle klienter connector til. GameLobby har en statisk List som indeholder objekter af typen 'GameInstance'. Disse GameInstance oprettes efterhånden som folk vil spille mod hinanden. Problemet er bare, hvordan får jeg sendt en GameInstance reference (ObjRef) tilbage til de to clienter som skal have adgang til netop den instance af GameInstance ?
Avatar billede md_craig Nybegynder
22. oktober 2006 - 14:01 #3
Du kan holde referencer på objecter over en channel hvis din klasse arver fra MarshalByRefObject, så skulle du bare kunne returnere en reference til dit object til din klient...

Men du skal huske der skal være en fælles kendt "pakke"... dvs. at du skal enten lade GameInstance klassen være velkendt af både klient og server... eller du skal lave et interface til den som er kendt af begge sider... det sidste er at foretrække så længe du kan nøjes med et interface... (Så længer serveren opretter objectet så skal clienterne kun vide hvad de kan bruge det til...)

En anden måde er at benytte dig af noget mere commando lign. dvs. udstyre hver GameInstance med et ID, og lade kleneterne gemme det... du kan så lagre GameInstance objecterne i en Dictionary istedet... for hurtigt at finde dem... og så viderdelegere kaldet til den rigtige instance fra din lobby...

Det er 2 måder at gøre det på... hvor den sidste involvere mindre remoting end den første... så er det bare lige, hvad vil man helst...
Avatar billede onkel_satan Nybegynder
22. oktober 2006 - 18:42 #4
Fedt, har fået det til at virke nu. Egentligt har jeg forsoegt mig med din foerste loesnings model, men må have vaeret så traet at jeg lige glemte at kalde min metode som returnere objektet foerst. For statan det er irreterende at lede efter en fejl som ikke er der, bare fordi man lige har glemt en 'mindre' detailje :D

Anyways, det hele ser meget lyst ud nu, så smid et svar for point.
Og tak for hjaelpen.
Avatar billede md_craig Nybegynder
22. oktober 2006 - 22:45 #5
Så lidt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester