Ako naprogramovat server?

Sekcia: Programovanie 11.07.2006 | 02:52
Avatar Frantisek Klabzuba Debian  Používateľ
Ahoj. Chcel by som odznova prepisat jeden moj starsi projekt, ide v podstate o herny server (server k multiplayer hre). Dolezite je ze server nejnak sprostredkovava komunikaciu medzi sebou samim a klientom a jednak medzi klientami navzajom. Mozete si predstavit napr. server u nejakej strielacky alebo realtimeovej strategie (t.j. ked hrac A presunie svojho pesiaka na polohu X,Y tak uz tam hrac B nemoze dat svoju jednotku). Aktualna verzia je robena len cez synchronny I/O multiplexing (1 server, klienti su v FDSet) ale chcelo by to spravit nejak poriadne. Napr. teraz to dokaze maximalne 256 klientov co je malo, a prekompilovat kernel s vacsim FDSet je zda sa mi blbost (navyse vecne problemy so stabilitou ked padne klienta tak obcas padne aj server a kedze to nieje oddelene - ako je to pri forku - tak padnu aj ostatny klienti). Napr. koncepcia ako u http servra sa tu neda celkom pouzit lebo http server spravi fork seba sameho ale tie jednotlive 2 forky http servra medzi sebou nekomunikuju (takze ta kolizia dvoch pesiakov sa tam neda spravit), chcelo by to asi nejaku zdielanu pamat alebo take nieco... Proste potreboval by som nejaky manual, cosi ako "Piseme kvalitne servre v C" alebo take nieco. Neviete niekto o nejakych materialoch. dvh
    • Re: Ako naprogramovat server? 19.06.2006 | 18:00
      ventYl   Návštevník
      no... ja osobne by som na to pouzil niekolko threadov z toho dovodu, ze to maximalne zjednodusuje vzajomnu komunikaciu (sharovany playground), staci zaviest len semafor a pred vstupom do kritickej casti nastavit timer, ktory thread zostreli, ak v kritickej oblasti stravi dlhsi cas ako maximalny povoleny (pre pripad, ze by klient odvisol). Pripad, ze server rubne dla mna riesit netreba, lebo ak rubne, tak proste rubne a skoncil si, treba to vyriesit tak, aby nerubol, resp. aby rubol len jeden thread pokial mozno mimo kritickej oblasti.
      • Re: Re: Ako naprogramovat server? 11.07.2006 | 02:50
        jb   Návštevník
        Mam stim uz skusenosti.
    • Re: Ako naprogramovat server? 11.07.2006 | 02:49
      jb   Návštevník
      Navrhujem urovit tem server takto: Ked hrac 1 presunie jednotku na bod X,Y tak server rozosle vsetkim ostatnim ze X,Y je zablokovane napadaju ma tieto metody: Bude bezat v pozadi mini kernel, ktory nebude pozuvivat FDSet je to zastarala blbost. Najlepsie by bolo pouzit asynchrne multiduplexne spojenie. Ked sa hrac presunie do bodu X,Y tak si to mini kernel ulozi do ram a nebude odosielat ze dany hrac sa nachadza natom a natom mieste pokial sa knemu nepriblizi. Samozrejme ze smeny v prostredy sa budu posielat. Takze logicky asynchrone multiduplexne spojenie je potrebne preto lebo trafik nebude synchrony kazdy bude matu plne upstream a downstream. A synchrony muttiduplexi kanal zaisti rovnovahu v trafiku. KEd sa hrac presunie na bod X,Y a nebudu hraci blizko tak nebude posielat presne kde sa nachadza. As ked sa hrac alebo hraci priblizia dost blizko as potom odosle infosku otom kde je. Musi tam aj bezat tato komunikacia: server musi byt informavani o zmene prostredi a zmene polohy hraca a este aj o pocte hracov. Podla toho sa bude riadit. Timto urcite dosiahnes stabilitu pretoze ak sa zdrbe nieco v sieti alebo v trafiku tak to neohrozi chod serveru.
    • Re: Ako naprogramovat server? 11.07.2006 | 02:52
      jb   Návštevník
      N