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

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

11

03.01.2017, 16:56

Bei dem cod-Prinzip erstellt der Spieler den Server doch auch selbst. Ich blicke ehrlich gesagt nicht ganz durch, was genau du jetzt erreichen möchtest.
WIP Website: kevinheese.de

Jar

Treue Seele

  • »Jar« ist der Autor dieses Themas

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

12

03.01.2017, 18:04

Jaein, ich bin auf den Beitrag von Nimelrian eingegangen.

Der Server wird nicht manuell vom Spieler erstellt, sondern automatisch vom Client, nachdem er zum Meta-Server die nötigen Daten geschickt hat.
Du kannst z.B. nicht einfach einen Server irgendwo erstellen und deine Kumpels anrufen und denen sagen... hey ihr, verbindet euch mal auf IP XYZ.

Du musst dich immer beim Meta Server einloggen und von dort aus ein Spiel erstellen, bzw. den Server starten lassen.

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

13

03.01.2017, 19:30

Ob du den Server jetzt vorher irgendwo anmelden musst oder nicht ist doch egal. Der Server läuft auch in dem was du beschrieben hast beim Spieler.

Du musst einfach nur unterscheiden zwischen dediziertem Server und listen-server/p2p Server. In einem Fall gibt es irgendwo (kann auch auf der Machine eines Spielers sein), den Servercode der separat läuft und auf dem alle Spieler connecten, und in dem anderen Fall öffnet der Spieler "im Spiel" einen Server.

Das kann beides über einen Meta-Server laufen und ist komplett unabhängig davon. Der Meta-Server würde vermutlich auch beide Server gleich behandeln.
WIP Website: kevinheese.de

Jar

Treue Seele

  • »Jar« ist der Autor dieses Themas

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

14

04.01.2017, 10:45

Anyway, die Diskussion läuft hier gerade in die falsche Richtung :)

Speziell habe ich gerade folgende Probleme und vielleicht habe ich auch eine falsche Vorstellung davon.

Ich habe eine Meta Server.
Client 1 und Client 2 verbinden sich mit dem Meta Server sobald sie die Anwendung starten.
Falls sie keine Verbindung bekommen, können sie nur den Singleplayer Modus starten.

Client 1 erstellt ein Spiel -> Game Server wird beim Client 1 gestartet. MetaServer speichert sich die Adresse und zeigt sie in einer Liste an.

Hier die erste Frage:
Starte ich einen Server beim Client 1 und lasse Client 1 auch mit diesem Server verbinden, so wie die anderen es auch machen, nur eben zu "localhost" ?
Würde ich Programm technisch das so gestalten, dass ein Client zwei Verbindungen offen hat, eine zum Meta Server und eine zum Game Server?

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

15

04.01.2017, 12:12

Das passt so schon grob. Aber die Details:

1) Du brauchst keine stehende Verbindung zum Meta-Server. Ein simpler HTTP-Request mit den Query-Parametern würde reichen, um eine Liste momentan verfügbarer Serverinstanzen zu produzieren. Auch für MatchMaking bräuchtest Du nur eine stehende Verbindung, solange der Spieler auf ein Spiel wartet.

2) Das Starten eines Servers bei einem Spieler ist evtl. knifflig, weil Spieler gern mal hinter Routern oder ner Firewall sitzen. Da brauchst Du dann NAT Punchthrough und/oder Router-Config via UPNP. Call Of Duty hat genügend ManPower und Erfahrung für sowas, aber hast Du die auch? Wenn nicht, nimm lieber das klassische Modell des Hostens, wo die User selber verantwortlich sind, dass der Server läuft und erreichbar ist.

3) Ja, der lokale Spieler kann dann gern bei localhost connecten. Gibt natürlich auch andere Methoden wie z.B. Shared SinglePlayer, wo ein Spieler sein SinglePlayer-Erlebnis zum Joinen freigibt. Das ist eine reine Frage Deiner internen Software-Architektur, das hat mit dem Thema erstmal nix zu tun.

4) Wieviele Verbindungen ein Programm offen hat, ist doch scheißegal. Mach Dir nur vorher ein paar Gedanken zum Software-Design
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Jar

Treue Seele

  • »Jar« ist der Autor dieses Themas

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

16

04.01.2017, 13:31

Call Of Duty hat genügend ManPower und Erfahrung für sowas, aber hast Du die auch?

Natürlich hab ich die nicht :)

Meine Idee wäre auch einfach ein schnöder Server im Netz, auf dem Spieler connecten und Spiele eröffnen können.
Ich benutzte für mein Anliegen Java und aus Bequemlichkeit kryonet (https://github.com/EsotericSoftware/kryonet) damit ich mich um tiefliegende TCP und UDP Probleme nicht kümmern muss.
HTTP-Request und Co. ist bei mir schon ziemlich lange her und müsste mich da erstmal einlesen.
Sollte vermutlich mit HttpServer und HttpClient funktionieren, aber da werde ich noch ein paar Runden drehen und die ein oder anderen Bilder malen^^

Mach Dir nur vorher ein paar Gedanken zum Software-Design

Die geteilten Gedanken sind bisher alle nur Design Fragen. Ich werde den Teufel tun und alles schon in Software gießen.
Natürlich hab ich das ein oder andere probiert, aber das ist alles eher noch probieren ob die gewählten Libaries meinen Ansprüchen genügen.

Die zahlreichen Ideen und Tipps hier sind auf jeden Fall sehr hilfreich.

Ich werden dann jetzt folgendes probieren:
Meta-Server HTTP fähig machen.
Request zwischen Client und Meta-Server als Http Request designen.
Kommunikation zwischen Clients und Game-Server bleibt weiterhin TCP/UDP mithilfe von kryonet.

(Link)

Hab meine Stifte für Paint nochmal rausgeholt.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Jar« (04.01.2017, 21:32)


Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

17

04.01.2017, 14:23

Prrrrima, genau so. Und wenn Du jetzt ne Server-Instanz erstellst, dann erstelle die doch auf der selben Maschine wie Dein Meta-Server und teile den Spielern dann die Server-IP plus den dynamisch bestimmten Port mit. Auf Deinem eigenen Server kannst *Du* die Bedingungen bestimmen, da bist Du nicht auf die Gnaden der Spieler-Umgebung angewiesen.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Jar

Treue Seele

  • »Jar« ist der Autor dieses Themas

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

18

04.01.2017, 14:53

Ich danke euch für eure Geduld.
Meine Ergebnisse ob alles funktioniert und das abschließende Design werde ich dann hier nochmal präsentieren.
Oder ich melde mich wenn ich auf neue Probleme stoße :)

Jar

Treue Seele

  • »Jar« ist der Autor dieses Themas

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

19

13.01.2017, 10:49

Kleines Update, ich habe mich nach einem Gespräch mit einem Kollegen dafür entschieden die Kommunikation zwischen Client und Meta-Server jetzt doch mit TCP zu machen.
Die Verbindung wird jedoch getrennt, wenn die nötigen Informationen geflossen sind und wieder aufgebaut wenn wieder Informationen benötigt werden.

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

20

13.01.2017, 11:03

Gute Sache. Für die Verhandlungen mit dem Meta-Server brauchst Du keine Reaktionszeiten oder sowas, da kannst Du die eingebaute Zuverlässigkeit von TCP einfach mitnehmen.

Du baust allerdings ein rundenbasiertes Spiel, wenn ich mich richtig erinnere. Da brauchst Du auch keine möglichst kleinen Latenzen und hast keine wiederkehrenden Mini-Updates für Entities, die der klassische Fall für UDP sind. Eigentlich kannst Du TCP auch für's ganze Spiel nehmen.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Werbeanzeige