Impact snelheid/verbinding, hosten zelfgemaakte game+server

Pagina: 1
Acties:

  • Captain Caveman
  • Registratie: Augustus 2003
  • Laatst online: 02-01 13:28
Even een korte inleiding:
Ik heb voor Firefox een extension gemaakt, PONG!, en ik ben nu multiplayer hier in aan het maken. Dit werkt allemaal best goed, als ik met 4-6 man tegelijk aan het spelen ben, en ook als ik een stresstest van +/- 1000 verbindingen 1x open/schrijf/lees/sluit.
Maar voordat ik mijn extension op addons.mozilla.org ga gooien, zou ik toch graag wat meer informatie willen hebben over wat voor een impact het hosten van een gameserver nu ongeveer zal hebben.

Details:
De PONG! Server is een klein in Delphi geschreven programma, dat m.b.v. Indy 9 van/naar TCP verbindingen leest/schrijft.
De PONG! client is in Javascript/XPCOM geschreven verbind met mijn server, schrijft data, en leest asynchroon de result data weer in.
Tijdens het spelen wordt (default) elke 33ms maximaal 24 bytes naar de server verzonden. De server zendt direct ook weer maximaal 24 bytes terug. De PONG! server gebruikt (heel erg ongeveer, gewoon uit de taskmanager...) 40KB per connected client.

Vraag:
Op dit moment is PONG! (de single player versie dus nog) +/- 32000 keer geinstalleerd van de mozilla site alleen. Het is natuurlijk niet reeel om aan te nemen dat deze allemaal tegelijk zullen gaan spelen, maar stel dat er 1000 mensen tegelijk aan het spelen zijn. Wat verbruikt dat dan aan bandbreedte, en hoeveel geheugen?

Server specs
Server details:
Windows 2003 Server
AMD 1400MHz
512MB
Internet 4Down/1Up
+ Website met +/- 100 lousy hits per dag

Mochten jullie meer gegevens nodig hebben, vraag het me maar.

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Geef de gameserver ook vrij en laat mensen die zelf draaien. Lijkt mij een beter idee dan dat jij de enige bent...

All my posts are provided as-is. They come with NO WARRANTY at all.


  • Captain Caveman
  • Registratie: Augustus 2003
  • Laatst online: 02-01 13:28
Dat zal waarschijnlijk wel moeten gaan gebeuren ja. Maar het is geloof ik niet echt gebruikelijk voor een Firefox extension om er nog losse onderdelen bij te leveren. Op de addons.mozilla.org komen ook HEEL erg veel (niet lullig bedoeld) 'gewone gebruikers'. Het koste me al erg veel moeite om 15 mensen bij elkaar te krijgen om de multiplayer versie te testen. Dus laat staan dat er spontaan mensen een server willen gaan draaien. Denk ik...
In het begin zal ik het dus zeer waarschijnlijk even alleen moeten doen. Vandaar toch nog graag een indicatie.

  • b19a
  • Registratie: September 2002
  • Niet online
Met andere woorden, je hebt 40 kB per client, dus 1000 clients kost je 40.000 kB. Per client wordt er 30*24 bytes per seconde verstuurd (=0,7 kB/s). 1000 clients kost je dan 700 kB/s.

(vrij logisch... waarschijnlijk bedoel je je vraag anders?)

  • FireWood
  • Registratie: Augustus 2003
  • Laatst online: 00:29
24 bytes per 33ms
per seconde: 24*(1000/33) = 727,3 byte

netwerk wordt in bits berekent:
727.3*8= 5818 bits/sec = 5.7 kbit/s
1000 users: 5.7*1000=5700 kbit/s = 5.7 Mbit/sec

Dit wordt wat problematisch.


Geheugen maal aantal connecties
40kB * 1000 = 40000kB
4000 / 1000 = 4 MB werkgeheugen

Lijkt mij geen probleem

(Ik ga geen discussie aan met afrondingen en met het getal 1024, aangezien deze berekening voornamelijk hoofdreken werk is.)

Noobs don't use "F1", Pro's do, but they can't find the information they needed


  • Captain Caveman
  • Registratie: Augustus 2003
  • Laatst online: 02-01 13:28
Ik vroeg me inderdaad eigenlijk af of het echt zo simpel was ja :)
Komen we wel op het enige onderdeel waar ik eigenlijk geen *fluit* vanaf weet. 700KB/s. Hoe moet ik dat getal zien? Als ik het letterlijk neem, gaat dat dus simpelweg gewoon nooit lukken, of zijn het nog andere factoren die de pijn verzachten? Dus moet ik het een upload van 700K kunnen leveren hiervoor, of zal het doordat alles toch langs elkaar heen loopt meevallen?

Probleem dus...

Is het dan nu handig voor mij om over te stappen naar het programming forum, om daar maar ideeen op te doen? Hoe doet een 'normaal' spel dat dan? 1x per 100ms is voor PONG! al erg weinig...

[ Voor 21% gewijzigd door Captain Caveman op 09-07-2005 23:05 ]


  • FireWood
  • Registratie: Augustus 2003
  • Laatst online: 00:29
Je kunt het makkelijkst je protocol versimpelen. Maak kleinere variabelen aan Eén byte minder en je bespaart 18% aan netwerk verkeer.

Echter waarom stuur je zo vaak een pakket? Je hebt dan allemaal overhead, dit zal in de praktijk gigatisch oplopen.

Verder, waarom laat je alles via de server lopen en laat je de clients niet onderling connecten? Bespaart gigatisch veel netwerk verkeer.
(ik ga er tenminste vanuit dat je het allemaal via de server laat doen, anders verstuur je niet iets om de 33ms.)

Noobs don't use "F1", Pro's do, but they can't find the information they needed


  • Captain Caveman
  • Registratie: Augustus 2003
  • Laatst online: 02-01 13:28
De server regelt op dit moment inderdaad alles... Je moet ergens beginnen met je eerste multiplayer game. Ik zal eens uit gaan zoeken of ik vanuit Ff ook onderling een verbinding op kan zetten. Waarschijnlijk wel, maar gewoon nog niet aan gedacht... Dank!

ps. Ik verstuur 'zo vaak' een pakket omdat PONG! nogal klein is, voor je het weet zit je al op een kritiek punt, waar je dus echt de huidige data van je opponent nodig hebt. Protocol aanpassen kan ook nog wel een beetje, maar de max zal toch wel op 24 bytes blijven...

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

In principe hoef je niet zo veel te versturen:

- paddleposities als ze veranderen
- balpositie bij het verschijnen
- richting van het balletje na het verschijnen

De rest kun je aan de clientkant uitrekenen aangezien die toch aan beide kanten hetzelfde reageert. Toegegeven dat je dan geen hele fancy dingen kunt doen, maar we hebben het hier over pong...

All my posts are provided as-is. They come with NO WARRANTY at all.

Pagina: 1