Gameserver
-
- 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
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?
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?
-
- 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
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
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
-
- 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
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.
-
- 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
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
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
-
- 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
Wo mich jetzt aber die verwendete Lösung interessieren würde.
Welcher Ansatz wurde gewählt, funktioniert es?
Grüße
Toni
Welcher Ansatz wurde gewählt, funktioniert es?
Grüße
Toni
-
- 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
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.
Re: Gameserver
Könnte das Programm beim Start sich nicht Theoretisch SeiteX aus dem Netzt downloaden,
Sich sammt Ip eintragen, und wieder Hochladen?
Sich sammt Ip eintragen, und wieder Hochladen?
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!
it´s not a bug, it´s a feature!
-
- 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
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.
-
- 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
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).