Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Spiele-/Grafikprogrammierung ::  Eigener Spieleserver sinnvoll? Viele Nutzer mit wenig Daten  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
B.Nutzer
Unregistrierter




Beitrag B.Nutzer Unregistrierter 20:29:37 04.02.2018   Titel:   Eigener Spieleserver sinnvoll? Viele Nutzer mit wenig Daten            Zitieren

Hi,
ich hatte überlegt mal ein kleines Spiel zu machen. Die Spielidee ist multiplatform-tauglich. Jedoch brauch man dazu einen zweiten Spieler. Gegen PC wird es nur ein sehr kurzes Vergnügen.
Daher bräuchte ich einen Server, der jeweils zwei Spieler miteinander verbindet.
Das Spiel ist recht datensparsam (für den Server). I.d.R. müssen pro Spieler nur etwa aller 5 Sekunden 2 Byte Informationen gesendet/empfangen werden. Pro Match (5min) einmal auch etwa 10-50 Byte. Pi mal Daumen kommt man dann im Schnitt auf:
-1Byte pro Sekunde je Match I/O.
-Arbeitsspeichernutzung je Match: ~50 Byte
-CPU-Insturuktionen je Match: <100 pro Sekunde (+Instuktionen für Datenempfang und senden)
-Festplattenspeicher je Spieler: 10 Byte
-Ping fast egal: <1sec

Was glaubt wieviele Leute da auf einer Maschine gleichzeitig spielen können?


Angeommen es ist ein hit :) und 10Mio Leute haben es und 200.000 spielen es gleichzeitig, dann kommt man auf etwa:
-100KB/s I/O (im Monat also rund 260 GB)
-Arbeitsspeichernutzung: 5MB + (<10MB Programm)
-CPU-Insturuktionen: <10Millionen pro Sekunde
-Festplattenspeicher: 100MB + (<10MB Programm)

Selbst dafür bräuchte man ja nur einen kleinen Teil der Server-Ressourcen. Flaschenhals ist höchstens die Anzahl der Clienten. Bei den Servern von Amazon bekommt man gleich 50GB Festplatte und mehrere GB RAM. Dazu bezahlt man dann auch noch Traffic. Das wird dann schnell ziemlich teuer. Gibt es da auch noch Angebote für weniger ressourcenhungrige Server (Andere anbieter)?

Könnte man 200.000 Leute überhaupt mit einm PC verbinden? Wenn die jeweils nur aller 5 Sekunden kommunizieren?
SeppJ
Global Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 28584
Beitrag SeppJ Global Moderator 22:02:58 04.02.2018   Titel:              Zitieren

Versuch doch erst einmal, dein Spiel zu programmieren und 100 Spieler dafür zu finden, bevor du dich damit beschäftigst, wie du League of Legends ablöst...

_________________
Korrekte Rechtschreibung und Grammatik sind das sprachliche Äquivalent zu einer Dusche und gepflegter Kleidung.


Zuletzt bearbeitet von SeppJ am 22:04:49 04.02.2018, insgesamt 2-mal bearbeitet
B.Nutzer
Unregistrierter




Beitrag B.Nutzer Unregistrierter 23:04:04 04.02.2018   Titel:              Zitieren

macht ja keinen Sinn es erst zu schreiben, wenns niemand spielen kann, da kein Server da ist.
Man brauch auch kein Spiel machen, welches 17 Monitore benötigt.

Ich dachte man sollte sich vor einem Projekt immer erstmal ein Plan machen, anstatt einfach drauf los zu coden.
rapso
Moderator

Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 8807
Beitrag rapso Moderator 02:34:02 05.02.2018   Titel:              Zitieren

Das wichtigste bei onlinespielen ist nicht einen plan zu haben fuer 1Mio spieler, sondern skalierbar zu sein.
jedes onlinespiel skaliert mit der userzahl, dein plan muss also sein eine architektur zu programmieren die sowohl 10 als auch 1000 spieler vertraegt. naeherst du dich den 500, wirst du pruefen ob dein spiel 10k spieler vertraegt und die noetigen tasks machen damit das klappt.

ich schlage dir diesen workflow vor:
1. prototypen programmieren
2. profilen was der limitierender faktor ist
3. plan machen wie damit umzugehen ist.

_________________
follow me|
-Mod im Spiele-/Grafikprogrammierung
SG1
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.03.2001
Beiträge: 3199
Beitrag SG1 Mitglied 02:48:45 05.02.2018   Titel:              Zitieren

Anders formuliert: Sicher ist es sinnvoll, einen Plan für die nächsten 2-3 Schritte zu haben. Du machst aber gerade den 10. Schritt vor dem ersten.
B.Nutzer
Unregistrierter




Beitrag B.Nutzer Unregistrierter 11:44:57 05.02.2018   Titel:              Zitieren

rapso schrieb:
Das wichtigste bei onlinespielen ist nicht einen plan zu haben fuer 1Mio spieler, sondern skalierbar zu sein.
jedes onlinespiel skaliert mit der userzahl, dein plan muss also sein eine architektur zu programmieren die sowohl 10 als auch 1000 spieler vertraegt. naeherst du dich den 500, wirst du pruefen ob dein spiel 10k spieler vertraegt und die noetigen tasks machen damit das klappt.

Das mit der Skalierbarkeit ist ein guter Punkt. Aber was wäre die erste Spieleranzahl bei der man Änderungen machen müsste? Bei normalen Onlinespielen wären das vielleicht die 10, 1000 bzw. 500. Die brauchen aber idR auch mehr Ressourcen. Mein Spiel wäre von der Server Interaktion jedoch weit weniger komplex. Von der Rechenleistung/Speicher wäen 200.000 Spieler gleichzeitig kein Problem. Ab einer gewissen Zahl wird es dann aber auch für einen Server zu aufwenidig, dann wäre Skalierbarkeit gefragt. Dies würde aber das Spiel viel kompliziert machen und die Server I/O sprunghaft erhöhen.

Frage ist also die erste Höhe der Spieleranzahl, die ein Server schaffen würde.

Aber ich denke ein Prototyp ohne extras und Grafik ist recht schnell machbar. Da könnte man die Leistungsfähigkeit des Servers testen. Spieler könnt man auch emulieren. Nur Frage, ob es dann einen Unterschied macht, wenn diese alle von der selben IP kommen, statt von unterschiedlichen.
TyRoXx
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.06.2009
Beiträge: 1762
Beitrag TyRoXx Mitglied 16:13:43 05.02.2018   Titel:              Zitieren

Ein TCP-Socket wird auf gängigen Betriebssystemen mindestens einige KB Speicher im Kernel belegen. Für SSL kommt noch einmal einiges im Userspace dazu. Dann brauchst du noch Datenstrukturen, um Matches und Spieler zu verwalten. Auch das wird weit über deinen geschätzten 50 Bytes pro Match liegen.

IP, TCP und SSL haben Protokolloverhead, der deine zwei Byte pro Sekunde um ein Vielfaches übersteigt.

Deine Schätzung von "100 CPU-Instruktionen" ist so daneben, dass ich mich frage, ob das hier ein aufwendiger Trolling-Versuch ist.

Wenn man 200.000 Spieler gleichzeitig hat, hat man völlig andere Sorgen als die Anzahl der Server, die man unterhält. Fang erstmal an Programmieren zu lernen. Mit der Zeit wirst du dann selber merken wie sinnlos deine Überlegungen waren.
rapso
Moderator

Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 8807
Beitrag rapso Moderator 18:31:06 05.02.2018   Titel:              Zitieren

B.Nutzer schrieb:
Aber was wäre die erste Spieleranzahl bei der man Änderungen machen müsste?
Darueber kann man entweder philosophieren, oder es messen.
(beim ersteren wird dir jeder eine andere zahl nennen). Das einfachste ist also, dass du das spiel zum laufen bringst und dann testest, wieviele connections du aufbauen kannst, und wie es laeuft.
Wenn es scheinbar dein erster gehversuch damit ist, ist die chance sehr gross, dass die limitierung nicht das ist, was du dir hier denkst, sondern was ganz anderes. (es ist ein erfahrungswert). Deswegen ist es am besten wenn du das messen wuerdest.



Zitat:
Von der Rechenleistung/Speicher wäen 200.000 Spieler gleichzeitig kein Problem. Ab einer gewissen Zahl wird es dann aber auch für einen Server zu aufwenidig, dann wäre Skalierbarkeit gefragt. Dies würde aber das Spiel viel kompliziert machen und die Server I/O sprunghaft erhöhen.

Frage ist also die erste Höhe der Spieleranzahl, die ein Server schaffen würde.
Die frage hast du ja quasi selbst beantwortet. 200k ist das limit, du misst wie schnell die nutzerzahl steigt, daran kannst du einschaetzen wieviel zeit du hast das anzugehen, dann schaetz du ein wieviel zu aendern ist und wieviel zeit das kostet.

wenn Arbeitszeit * 2 > (Nutzerlimit-Nutzerzahl)/Steigerungsrate, dann hast du keinen stress beim projekt.
(*2, weil du sichergehen solltest)


Zitat:
Aber ich denke ein Prototyp ohne extras und Grafik ist recht schnell machbar. Da könnte man die Leistungsfähigkeit des Servers testen. Spieler könnt man auch emulieren. Nur Frage, ob es dann einen Unterschied macht, wenn diese alle von der selben IP kommen, statt von unterschiedlichen.

mit der zeit wirst du lernen welche messdaten wie zu interpretieren sind. Wenn der prototyp schnell zu machen ist, waere das echt die beste investition deiner zeit! :)

_________________
follow me|
-Mod im Spiele-/Grafikprogrammierung
Mechanics
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.01.2012
Beiträge: 4252
Beitrag Mechanics Mitglied 20:47:02 05.02.2018   Titel:              Zitieren

200.000 Spieler gleichzeitig halte ich für völlig unrealistisch, das dürfte kein Server packen. Wie TyRoXx geschrieben hat, allein der Overhead von TCP/IP ist um Größenordnungen höher, als das was du dir vorstellst.

Ich glaube, in der c´t gabs mal einen Artikel über einen Betreiber von einem Schachserver. Ist schon Jahre her, kann mich kaum an was konkretes erinnern. Aber das war glaub ich jedenfalls so, dass sie auch mit nur einem Server auskommen wollten und das damals auch geschafft haben. Dafür mussten sie einiges selber programmieren.
Und das waren glaub ich nicht wahnsinnig viele Spiele, die sie gleichzeitig verwalten mussten, evtl. um die tausend. Schach ist einerseits komplexer, weil der Server zumindest die Gültigkeit der Züge überprüfen muss, und das schafft man nicht innerhalb von 100 Instruktionen. Andererseits ist da aber auch nicht sooo viel zu tun, deswegen war die Verwaltung der Sockets und Sessions vermutlich immer noch der limitierende Faktor.
B.Nutzer
Unregistrierter




Beitrag B.Nutzer Unregistrierter 00:06:20 06.02.2018   Titel:              Zitieren

Nicht 100 Instruktionen insgesammt, sondern pro Sekunde pro Match.
Dazu kommen (wie geschrieben) noch diese, die für den Datenaustausch zuständig sind. Die für Matchsuche habe ich aber tatsächlich vergessen. Wenn das dann 100.000 wären, wären das bei 5min Match im Schnitt 33 mehr pro Sekunde.
Arbeitsspeicher für Matchsuche auch vergessen, wärn dann ca. 100MB mehr.

Das mit dem Schach war guter Vergleich. Serverseitig ist meins aber noch ein ganzes Stück leichter.

Habe mal eine Single-Player version (ohne extras und Gafik) getestet. Wenn man allein die Rechenkapazitäten zur Spielzugführung betrachtet, könnte mein PC gleichzeitig über 100Millionen Spielzüge/Matches abarbeiten. Der Rechenaufwand für das Spiel selbst (auf dem Server) sollte also nicht das Problem darstellen.


Soweit ich gelesen habe ist UDP weniger teuer als TCP und reicht auch. Werde versuchen dies zu verwenden. Gesicherte Verbindung hat auch sein Vorteile, aber da werden keine sensiblen Daten gesendet. Cheaten kann man auch nicht. Höchstens unter falscher Idendität könnte man spielen. Da muss ich mir noch was einfallen lassen.
C++ Forum :: Spiele-/Grafikprogrammierung ::  Eigener Spieleserver sinnvoll? Viele Nutzer mit wenig Daten  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.