Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

1

27.01.2012, 19:11

"GameRooms" verwalten?

Hey all,
bin mal wieder hier und hab ne Frage:
mein Spiel ist soweit entwickelt, dass es sich online zu einem Master Server vebinden kann und mit ihm Daten austauschen kann. Nun kommen in meiner ToDo Liste Räume dazu, also "GameRooms" zu denen mehrere Spieler sich verbinden können. Wenn sich genug Spieler verbunden haben wird das eigentliche Spiel im "GameRoom" gestartet. Also dass das Spiel auf einem anderen Server/in einem anderen Prozess läuft wie z.b. bei League of Legends, Heroes of Newerth, etc. Ihr wisst was ich meine?
Jetzt hätte ich verschiedene Möglichkeiten so einen "GameRoom" zu starten.

- vom Master Server aus, eine neue Anwendung (auf anderen Port) zu starten und die Anwendung ist einfach der "GameRoom", der das Spiel handled.
- vom Master Server aus, einen neuen Thread starten und dort den "GameRoom" starten
- vom Master Server aus, auf einem anderem Server eine Anwendung benachrichtigen, dass ein Neuer Raum erstellt werden soll. Diese Anwendung lauscht natürlich auf einem anderen Port und gibt dann die Portnummer, auf dem der "GameRoom" gestartet ist, dem Master Server und er kann dann wiederum die Spieler benachrichtigen auf welcher IP und Portnummer der GameRoom zu erreichen ist. (Die "GameRooms" sollten natürlich am Anfang auf dem Server vom Master laufen, da ich nur gerade einen Server zur Verfügung habe)

Zusammengefasst:

Entweder einen neuen Prozess starten oder einfach in der MasterServer Anwendung neue Threads erstellen und wenn es mehrere Server gibt, gibt es auch mehrere MasterServer die "GameRooms" in Threads starten können und die MasterServer können miteinander kommunizieren
oder gibt es da was ganz anderes wie ich das am besten Lösen kann?

Danke im voraus und sorry wenn ich es ein bisschen umständlich erklärt habe, aber wusste nicht so ganz wie ich diese Sachen formulieren soll. :)
New Project: Operation CityRacer

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Nexxtron« (27.01.2012, 21:34)


DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

27.01.2012, 20:46

Ich kann mir ehrlich gesagt nicht vorstellen das Spiele wie LoL das machen... Dann doch eher deine letzte Variante. Aber ich kenn mich da jetzt natürlich auch nicht aus.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

27.01.2012, 22:10

Du brauchst weder eine eigenen Anwendung, noch einen eigenen Threat für einen "Raum". Wieso glaubst Du, dass das notwendig wäre?

Stichworte: State-Machine, Event Driven System.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

4

28.01.2012, 00:09

Naja gut, ich möchte dass mein Master Server von solchen SpielDaten entfernt bleibt, also der MasterServer sollte sich nur um chat,freundeliste,blabla kümmern.
Und dann der "Raum" also ein eigener Thread oder eine eigene Anwendung kümmert sich nur um die SpielDaten, so könnte man ja dann auch die "Räume" auf andere Server auslagern und der MasterServer wird dann nicht mit unnötigen Daten belastet, sondern er sollte sich nur um die Authentifizierung der Accounts und wie oben schon erwähnt so Sachen wie chat kümmern.

Ich würde dann noch eine Anwendung ("Raum") schreiben, die auf einem anderen Port als der MasterServer läuft.
So kann dann ein Client eine "Spiel erstellen"-Nachricht an den MasterServer schicken und dann startet der Master eine neue "Raum"-Anwendung die z.b. auf Port 5000 lauscht.
Der Client wird dann benachrichtigt ob sich der "Raum" auf dem Server des Masters befindet oder auf einem anderen externen Server und der Port wird noch dem Client gesagt.

Der Client und andere SpielerClients können sich jetzt zum "Raum" verbinden und warten bis eine bestimmte Anzahl verbunden sind und dann werden nur SpielDaten zwischen der "Raum"-Anwendung und allen verschiedenen Clients ausgetauscht. Also hier findet dann das Spiel statt, also da wird dann über Internet gezoggt. Am Ende des Spiels wird der "Raum" geschlossen und Daten wie z.b. Kills oder so zum MasterServer übermittelt und dann wird z.B. die Spielerstatistik aktualisiert.

Wenn 10 oder 100 Leute das Spiel spielen würden dann könnte ich wie du gesagt hast BlueCobold das alles auch auf dem MasterServer abarbeiten, aber bei 1000 oder mehr würden denk ich dann mal Traffic-Problemen auftreten. Ist halt ein Zukunftsgedanke, da ich das Projekt sehr ernst nehme.

und so wie ich es jetzt erklärt habe, würde das so passen oder gibts ne bessere Lösung oder sollte ich echt das alles in einer Anwendung unterbringen oder hab ich zu diesem Thema einen ganz falschen Gedankengang?
oder was würdet ihr mir empfehlen?
New Project: Operation CityRacer

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Nexxtron« (28.01.2012, 00:28)


Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

28.01.2012, 00:38

Spiele wie HoN/LoL etc arbeiten definitiv mit anderen Anwendungen. Allein schon weil sich eine große Anzahl von Anwendungen viel besser auf mehrere reale Computer verteilen lassen. Allerdings muss man dann halt die Kommunikation zwischen Haupt- und Spielserver noch hinbekommen. Ich würde dir am Anfang eher zu einer einfachen Variante raten. Zur Not kann man am Ende das immernoch in Haupt- und Spielserver aufteilen, allerdings bezweifel ich, dass die meisten Projekte diese Grenze wirklich erreichen. Auch erspart man sich damit zunächst eine ganze Menge Probleme.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

28.01.2012, 08:21

Wenn 10 oder 100 Leute das Spiel spielen würden dann könnte ich wie du gesagt hast BlueCobold das alles auch auf dem MasterServer abarbeiten, aber bei 1000 oder mehr würden denk ich dann mal Traffic-Problemen auftreten.

Warum lässt Du dann die Rooms nicht von einem der Clients hosten? Aber Traffic... also wenn Du ein MMO planst, dann brauchst Du generell Traffic. Und 1000 User zu verwalten, die nur Chatten und in Chatrooms sitzen... IRC bekommt das schließlich auch ganz prima hin. Da mag's auch immer mehrere Server geben im Verbund, aber einer allein hat damit auch kein Problem. 1000 User klingt aber etwas unrealistisch ehrlich gesagt. Diese Grenze wirst Du mit einem Hobby-Projekt nur sehr selten erreichen und bis es soweit ist, solltest Du Dich lieber darauf konzentrieren es überhaupt lauffähig zu bekommen und User anzulocken. Wenn es nämlich keinen interessiert, dann hast Du Zeit in ein Stück Architektur verschwendet, was es wesentlich einfacher auch getan hätte.

1000 Threats oder 1000 Anwendungen auf dem selben Server sind übrigens eine super Idee um das Teil ganz schnell in die Knie und damit zum Absturz zu bringen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

7

28.01.2012, 12:19

Okey danke euch für die Antworten, die haben mir weitergeholfen. Dann werde ich denk ich mal in meiner MasterServer-Anwenung eine Klasse erstellen ala "Room" erstellen, die das Spielgeschehen handled und wenn es dazu kommt (was eher unwarscheinlich ist) kann man ja diese "Room" Klasse ja noch in ne eigene Anwendung unterbringen und dann auf andere Server auslagern, aber wie gesagt ist nur Zukunftsgedanke.

Zitat

Warum lässt Du dann die Rooms nicht von einem der Clients hosten?
Das geht ja wenn ich mich nicht irre nur mit PortForwarding und des will ich dann wieder meinen Ahnungslosen Zocker nicht antun (wenn es überhaupt jemand spielt) :D, da wenn niemand was aufmachen würde es auch keine "Räume" geben, wobei ich eigentlich selbst dann aufm Server Automatische Clients hosten könnte..

Zitat

Spiele wie HoN/LoL etc arbeiten definitiv mit anderen Anwendungen.
wie meinst du das? so wie ich es beschrieben habe, also dass sie z.B. für "Räume" ne andere Anwendung benutzen als für den "MasterServer" und diese dann auslagern können?
New Project: Operation CityRacer

m3xx

Alter Hase

Beiträge: 434

Beruf: Student

  • Private Nachricht senden

8

28.01.2012, 14:02

Theoretisch könnteste es auch Teeworlds-Like machen das jeder seinen Raum selber hostet diese werden mit dem Master-Server connected werden

Pro und Kontra:
+ Es werden wenige Masterserver benötigt (Teeworlds waren es nur 4 solange wie ich gezockt habe)
+ Nicht jeder Noob kann einen Raum öffnen

- Der Raum-Ersteller muss Ports selber bei seinem Router öffnen
- Es ist etwas schwieriger den Server zu erstellen, durch Firewall, Router etc.
- Der Traffic des Hosters ist entsscheidend ob der Server lagt oder nicht

falls du dir Teeworlds mal angucken willst und wie das ganze system läuft: www.teeworlds.com

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

28.01.2012, 14:43

Zitat

Warum lässt Du dann die Rooms nicht von einem der Clients hosten?
Das geht ja wenn ich mich nicht irre nur mit PortForwarding und des will ich dann wieder meinen Ahnungslosen Zocker nicht antun (wenn es überhaupt jemand spielt) :D, da wenn niemand was aufmachen würde es auch keine "Räume" geben, wobei ich eigentlich selbst dann aufm Server Automatische Clients hosten könnte..

Dafür gibt es UPNP, das funktioniert prima und wird bei vielen aktuellen Spielen auch so benutzt - heißt effektiv dass das Spiel das Port-Forwarding beim Router "anmeldet" und dieser es dann freischaltet. Damit muss eigentlich niemand irgendwelche Ports mehr manuell weiterleiten. Klar, es gibt immer mal wieder jemanden, bei dem es trotzdem nicht geht und daher keiner joinen kann, aber das ist die Minderheit.

Das "Aufmachen" kann problemlos versteckt werden, sodass der eigentliche Host gar nicht weiß, dass er einen Raum aufgemacht hat und das Game hosten wird. Auch das wird in aktuellen Spielen so gemacht und auch das funktioniert prima.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

10

28.01.2012, 17:13

@m3xx, Danke, aber da hat man das Problem das es sein kann, dass kein Spieler was gehostet hat und dann gibts keine Server, wobei man dann automatische Clients auf meinen Server erstellen kann die dann auch den Server hosten können.

@BlueCobold, ja UPNP kenne ich. Hab in den Anfängen von Netzwerkprogrammierung damit mal arbeiten wollen um nicht immer ports öffnen zu müssen, aber ich bin kläglich daran gescheitert. Zum einen hab ich keine Tutorials oder Quellcode Beispiele dazu gefunden und zum anderen hab ich irgendwo gelesen gehabt, dass das alle Router verschieden implementieren, wobei ich das nur gelesen habe. Aber ich schaus mir mal nochmal an, weil das ne Gute Idee noch wäre.

Zitat

Das "Aufmachen" kann problemlos versteckt werden, sodass der eigentliche Host gar nicht weiß, dass er einen Raum aufgemacht hat und das Game hosten wird. Auch das wird in aktuellen Spielen so gemacht und auch das funktioniert prima.
das wäre genial, aber was wäre wenn der Host plötzlich einen Verbindungsabbruch hatte und nicht wieder kommt und auf ihm waren alle Daten wie Kills gespeichert oder sowas? Dann können die anderen Host nicht mehr miteinander spielen...wobei dann einfach der nächste Host zum Server umfunktioniert wird. Ich denk so wird des auch bei Warcraft3 gehandled.


Mensch ihr bringt mich in Verlegenheit :D ...welche Technik soll ich jetzt benutzen? Ich werde warscheinlich die Raum Verwaltung mit auf den MasterServer integrieren, ist die einfachste Lösung.
New Project: Operation CityRacer

Werbeanzeige