Gameserver

Alle Fragen zur Netzwerkkommunikation
Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Gameserver

Beitrag von Scotty »

Ich versuche gerade, mein Spiel netzwerkfähig zu machen. Bisher musste der Benutzer angeben, ob er Server oder Client ist, wobei als Client dann zusätzlich die IP-Adresse des Servers eingetragen werden muss. Der Server bekam die Informationen eines Clients und hat diese dann an alle anderen verteilt. Der Nachteil dabei ist, dass normale Menschen kaum mit IP-Adressen umgehen können und zudem auf einem anderen Weg Informationen, zum Beispiel telefonisch, geklärt werden muss, wohin die Verbindung gehen soll.
Eine Möglichkeiten, mit der ich das Problem zu beheben versuche, ist, dass die Spieler sich an einem "zentralen Server" anmelden, der dann ihre IP-Adresse kennt. Ich stelle mir das wie bei einem Schachserver vor - dort logge ich mich auch ein, suche nach Spielern und starte dann eine eigene "Instanz". Also müsste der Server auf jede Anfrage alle angemeldeten Clients über diese Änderung informieren. Nach Spielbeginn werden dann die Daten wie gehabt ausgetauscht und die Spieler aus der Liste entfernt. Intern würde ich festlegen, wer Server ist. Für einen "zentralen Server" könnte man wohl kostenpflichtigen Webspace kaufen (ich schätze ungefähr 10€ monatlich) oder man nutzt einen MySQL-Server per PHP (in diesem Fall kostenlos). Ich kann nicht abschätzen, welche Probleme ich bei den jeweiligen Vorgehensweisen bekomme. Angenommen, 1000 Spieler sind gleichzeitig aktiv und fragen im Sekundentakt Statusinformationen aus der Datenbank ab, wird dann nicht ein Betreiber kostenloser Seiten höflich die Hand aufhalten? Was passiert in der Alternativvariante, wenn sich 1000 Spieler an meinem Server anmelden und damit entsprechend viele Threads aufmachen?
Was meint ihr, wie ich diese Sache angehen sollte?

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Gameserver

Beitrag von Euklid »

Hallo Scotty,

ich bin hier zwar kein Fachmann, aber die Datenmenge dürfte bei einem reinen Austausch der IPs ja nicht zu groß sein. Man könnte ja diese Spielerliste einmalig komplett übertragen, wenn ein neues Spieler das Spiel startet und anschließend, bei einer Aktualisierung der Spielerliste des bereits gestarteten Programms, nur noch die bis dahin aufgetretenen Änderungen übermitteln. Das ließe sich recht einfach regeln, wenn du zur übermittelten Spielerliste eine Art Versionsnummer angibst: Bei einer Aktualisierung schickt der Klient die Nummer seiner Liste an den Server und der Server schickt die Liste der Änderungen, die seit dieser Versionsnummer aufgetreten sind, zurück.
Zudem muss der Klient nicht im Sekundentakt nach neuen Spielerlisten suchen. Viele Online-Spiele machen das nach einem relativ großem Zeitzyklus (z.B. 1-2 min) und zusätzlich, wenn der Spieler auf "Aktualisieren" klickt.

Ich denke, durch diese Maßnahmen ließe sich sowohl die Datenmenge als auch die Zugriffshäufigkeit auf ein für kostenlose Betreiber erträgliches Maß runterschrauben.

Viele Grüße, Euklid

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Gameserver

Beitrag von Scotty »

Ich wäre auch für Hinweise zur Umsetzung dankbar. Ich vermute, dass PHP/SQL nicht allzu schwierig ist, hab's aber noch nie gemacht. Vielleicht kennt ja jemand einen quelloffenen Ansatz.

Live
Beiträge: 144
Registriert: So 22. Aug 2010, 16:06
OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
CPU-Target: 64bit
Wohnort: NRW
Kontaktdaten:

Re: Gameserver

Beitrag von Live »

Eine Umsetzung für solch einen "MasterServer" mit mySQL und PHP dürfte nicht das Problem sein. Allerdings würde ich bei soetwas eher auf PostgreSQL verweisen. PostgreSQL handelt Abfragen parallel ab und nicht nacheinander. So ist die Kommunikation zwischen Client und MasterServer wesentlich schneller. Das Problem des "Traffics" oder der Auslastung, die durch 1000 User entsteht vergleichsweise eher ein Minimum, da PHP-Prozesse recht geringe Auslastungen haben.

Allerdings ist es vermutlich besser für solch eine Anwendung einen Webspace zu haben, bei dem man eventuelle Konfigurationen in der Apache.conf etc. vornehmen kann, um ein schnelleres Handling für den Client zu erreichen.

Zusätzlich würde ich die Optionen, die Euklid vorgeschlagen hat, berücksichtigen, da sie ebenfalls den Traffic verringern.

Edit: Ups, Thread war ein bisschen älter, sorry :P

ToniCE
Beiträge: 12
Registriert: Mo 31. Dez 2007, 11:13
OS, Lazarus, FPC: Slackware Linux | Windows XP 32bit (beide Laz 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit
Wohnort: NRW
Kontaktdaten:

Re: Gameserver

Beitrag von ToniCE »

Wo mich jetzt aber die verwendete Lösung interessieren würde. :)

Welcher Ansatz wurde gewählt, funktioniert es?

Grüße

Toni

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Gameserver

Beitrag von Scotty »

Ich habe mir einen eigenen Server zugelegt (Sheeva Plug, ~100€). Darauf läuft Linux und mein Service (allerdings noch nicht als Deamon). Der Server läuft und bedient seit einigen Monaten (fast) problemlos Spieler aus aller Welt. Den Quellcode gibt es frei unter Lazforge und Sorceforge.

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: Gameserver

Beitrag von felix96 »

Könnte das Programm beim Start sich nicht Theoretisch SeiteX aus dem Netzt downloaden,
Sich sammt Ip eintragen, und wieder Hochladen?
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

Live
Beiträge: 144
Registriert: So 22. Aug 2010, 16:06
OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
CPU-Target: 64bit
Wohnort: NRW
Kontaktdaten:

Re: Gameserver

Beitrag von Live »

felix96 hat geschrieben:Könnte das Programm beim Start sich nicht Theoretisch SeiteX aus dem Netzt downloaden,
Sich sammt Ip eintragen, und wieder Hochladen?


Da wäre es viel einfacher und schneller eine simple SQL Anweisung auszuführen, oder auch 2 oder 3. Ist immernoch fixer als SeiteX zu laden, zu editieren und hochzuladen.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Gameserver

Beitrag von Hitman »

Live hat geschrieben:Da wäre es viel einfacher und schneller eine simple SQL Anweisung auszuführen, oder auch 2 oder 3. Ist immernoch fixer als SeiteX zu laden, zu editieren und hochzuladen.

... abgesehen davon, dass es enorm schwierig zu synchronisieren wäre. Also ja, dann doch lieber SQL (oder eben ein eigenes Protokoll).

Antworten