Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  5 1566
Hei,

har skrevet en del "test-servere" nå for å speed teste litt etc - dette er skrevet i python3.3 og bruker ingen ekstra moduler etc.

Det jeg lurer på er;
Vil jeg få noe igjen performance-wise i å gå over til gevent(eller andre moduler)?

Hvilke moduler anbefales til dette i forhold til ease of use / performance?

Bakgrunnen; Skal brukes i en spillserver til et hobby/research spill, nåværende versjon av serveren er skrevet i PHP. Spille var først en skoleoppgave, så ble det litt testing av hva som var mulig med PHP+sockets etc. Det har til dags dato vært gjennom svært mange rare valg av teknologier. Tenke nå å skrive en server i Python som faktisk kunne vare en stund og brukes til spillet.

Har ikke satt noe grense på antall klienter, vil derfor også velge en module som ikke begrenser noe der i forhold til klienter/performance.

Hvorfor python?
Har tenkt på å kode serveren i C# eller C, men mtp. på at jeg ser for meg mange endringer på serverkoden, særlig i starten når ikke alle elementer for gameplay er definert enda tenkte jeg python måtte være et bedre valg.

Vet jeg kunne gått for C#/C(eller hva-som-helst) med scripting ved siden av, men føler det fort da kan bli litt rot, og mye arbeid for å endre netcode etc.

Edit:
Brainfart når jeg startet å skrive, huska ikke hva performance(Ytelse. Ytelse! YTELSE! <_>) var på norsk.
Sist endret av hayer; 22. januar 2013 kl. 10:45.
Dette er jo nesten noe du måteste.

Hvor mange requests/second klarer du nå? Hvor mange connections samtidig? Hvor mange har du behov for?

Kan du kjøre flere servere samtidig for å dele på lasten?
Sist endret av flexd; 22. januar 2013 kl. 12:09.
hayer's Avatar
Trådstarter
Requests/sec er jo ikke noe interessant mtp. på at det er en spillserver og man kobler ikke til/fra hele tiden.

Men ja, PCen blir helt sirrup før jeg merker noen problemer på serveren - men er redd det er pga. det kjører for mange klienter. Har ikke muligheten til å kjøre opp flere PCer(siden jeg ikke har flere). Men skrev en bitte liten client som kobler til å ping-ponger - da så det ut til å stagnere mot 700.. Men da igjen sendte jeg jo ingen data og serveren slapp å håndtere fysikk og input.

Det å kjøre flere servere samtidig(cluster? cloud aktig?) har jeg tenkt på - men da må du ha synkronisering og validering av data mellom serverne også. Ettersom jeg da ser for meg at du må la hver server ta seg av en egen del av "verdenen".
Det spørs jo litt påhvor stort det hele er. I world of warcraft f.eks løses det med en slags instancing der hvert kontinent er på sin egen server om jeg husker riktig. Det var ihvertfall sånn når jeg spilte før TBC kom.

I eve online er hvert system i utgangspunkt på sin egen server om det har nok besøkende. De kan flyttes over dynamisk uten åtrenge restarts så de systemene som er tomme vil enten alle være kjørende på en felles maskin, eller ikke kjørende i det hele tatt. De større systemene deles opp i enda flere soner internt i systemene for å takle alle brukerne.

Hva du ønsker å gjøre er nesten bare noe du må prøve deg fram til, jeg vet ikke noe særlig om spillet ditt :-)

Om du skal ha flere servere som styrer samme verden (eller uansett) så burde de jobbe opp mot samme database, enten det er i minnet eller pådisk/via nettverk. Dette vil jo være eneste måten å holde verden synkronisert mellom de forskjellige serverne.

For å teste ytelsen kan du jo f.eks teste litt lokalt sånn du gjør nå og dele ut klienten til noen venner eller noe sånt.

Skal du teste påstørre skala bør du jo nesten ha et spill åvise fram først, så folk gidder åteste med klienten din :-)

Om jeg kan få se på koden og klienten kan kjøres på linux så kan jeg sikkert kjøre et par klienter her på noen VPS om det hjelper deg. :-)
m0b
m0b's Avatar
DonorAdministrator
Husk også på det at hvis du skal se på hvordan et program klarer seg i et miljø så vil det være veldig greit å sette opp målere med Performance Monitor (perfmon.msc). Sett opp målere på IOPS, disk quene length, minne (page hits/faults etc) og diverse slike målere, og eventuelt nettverksaktivitet.

Ut i fra disse grafene så kan du kjapt sette diagnoser på hvor flaskehalser ligger. F.eks om du har laget deg en server og du merker at dataflyten går svært tregt, og i samme tidspunkt på serveren så er disk queue length veldig høy, så vil det være en rimelig grei tanke at disken din fysisk ikke klarer å håndtere all data som skal tømmes fra buffers og ned på plata. Google et par guider på bruk av perfmon. I et driftsmiljø bruker jeg dette mer eller mindre daglig for å kunne se hvordan serverne har det, og hvilke prosesser som eventuelt kveler hvilke elementer på serveren.
▼ ... noen uker senere ... ▼
hayer's Avatar
Trådstarter
Etter litt testing av performance mht disk, nett, cycles i fysikk simulering fant jeg ut at Box2d sin python implementasjon var litt for treg.. Så har gått over til C++ for selve simuleringen og håndtering av nettverksdelen og python-script for spill-logikken.

Sliter nå med å få til en C++ - Python binding jeg er fornøyd med.