Wie funktioniert ein Server & die Serverliste

  • Hallo zusammen,


    mich würde interessieren, wie so ein Server funktioniert & wie man den ins Spiel integrieren kann.


    Als Beispiel nehme ich Counter Strike. Hier werden die Server gelistet & kann denen beitreten.


    Nun meine Fragen:
    Wie wird der Server mit dem Spiel verbunden?
    Kann ein Server mehrere Räume anbieten?
    Woher weiß der Server, welche Spielinhalte wiedergeben werden sollen? ( Wer Counter Strike kennt, weiß, dass es z.B. Bunny Hop, Zombie, Free For All, Demolition etc. Server(also verschiedene Spiel-Modi) gibt)
    Wie wird ein Game-Server aufgesetzt?

    • Offizieller Beitrag

    Bin zwar auch kein Profi in diesem Gebiet aber das Funktioniert ungefähr so:


    Du brauchst einen Server und einen Clint, der Clint bist du in dem du dich mit dem Server verbindest.


    Der Server ist sowas wie ein Treuhand Service der mit allen Clints spricht und Regelt. Da auf dem Server das Spiel selber nicht laufen muss sondern der Server im Prinzip nur Informationen Synchronisieren.
    Das Synchronisieren ist hierbei sehr wichtig hierzu mal ein Beispiel:


    Du bist mit einem Kumpel auf einer Counterstrike Map du siehst ihn und er sieht dich, du beginnst zu schießen. Du Bist der Clint A der dem Server nun deine Position meldet und was du gerade tust. (Schießen)
    Der Server gibt diese Information nun an den Clint B weiter. Und dies passiert im Normalfall alle paar Millisekunden.
    Bricht nun das Internet ab oder es sind gerade 200 Player auf der Map die gerade alle Gleichzeitig eine Granate werfen die alle gleichzeitig explodieren. Wenn nun einer von dehnen einen Langsamen Rechner hat der diese Informationen langsamer verarbeitet als alle anderen, dann kommt es zu einem Lag. Ein Lag ist also im Prinzip nichts anderes als wenn die Synchronisation verloren gehen. Es gibt nun Server die dich sofort Kicken wenn das passt. (Player has Left the Game) und es gibt Server die dann 30 Sekunden auf den Player warten.
    Eine Wichtige Aufgabe des Servers ist es also die Informationen bei allen Clints Synchron zu halten. Dazu muss der Server alle paar Millisekunden wichtige Informationen abfragen und an alle Server weiter geben.


    Wenn du nun so eine Serverliste haben willst könntest du das folgendermaßen realisieren.
    Du Installierst einen Webserver der Tag und Nacht läuft. Auf ihm kannst du eine Webseite aufrufen wo du beispielsweise einen Counterstrike Server mit der Map xyz Startest. Nun läuft die leere Map.
    Nun startest du als Spieler Counterstrike du sagt zb Join Game und dein Spiel ruft den Webserver auf und dort wird abgefragt welches Spiele im Moment gerade laufen.
    Der Spiele Server beginnt nun mit dem Treuhand Server und sagt zuerst einmal dem Webserver das nun 1 Spieler auf der Karte ist. Nun kommen weitere Spieler dazu. Irgend wann sagt der Spieleserver dem Webserver das nur 16 Spieler auf der Map zugelassen sind, und der Webserver sagt dir als Clint das der Server voll ist.
    Der Webserver ist also im Prinzip nichts anderes wie ein Clint der zwischen den Player Clints und dem Spieleserver vermittelt. Nachdem du als Spieler mit dem Spieleserver verbunden bist, übernimmt der Spieleserver komplett, das heißt alle Informationen laufen direkt über den Spieleserver und nicht mehr über den Webserver. Der Webserver prüft dann nur noch ob er mehr Spieler auf die Karten lassen darf oder nicht. Er frägt den Spieleserver zb auch welche Maß dort gerade läuft und wer zb die meisten Kills hat.


    Andere können dir da vielleicht noch mehr dazu sagen und mehr ins Detail gehen. Ich habs versucht so zu erklären das es meine Großmutter verstehen kann.

  • https://docs.unrealengine.com/…ameplay/Networking/Server
    https://docs.unrealengine.com/…lay/Networking/Blueprints


    nicht wie ich installier ich den sondern die frage ist wie macht man einen.


    als kurzfassung:


    du hast 1 Master server, mehrere spiele server, und clients
    wenn der spieler die serverbrowser liste aufruft wird vom masterserver die liste abgefragt.
    der masterserver bekommt die liste bzw erstellt sie durch die anfragen was die Spieleserver an den masterserver stellen ("spiele server sagt hallo hier ist noch ein Spiele Server")

  • Hallo zusammen


    So einfach lässt sich das gar nicht beantworten - zuerst gibt es noch andere Fragen zu berücksichtigen.
    Es gibt einerseits Listen Server, einfach gesagt, "spielt" hier der Host auch als lokaler Spieler mit.
    Das andere ist der Dedicated Server, er bietet üblicherweise Performance Vorteile, weil er nicht alles ausrendern muss, auch kein Audio etc., daher er nicht als lokaler Spieler mitspielt ist das nicht nötig, einfach gesagt.
    Listen Server bietet oftmals Kostenvorteile und je nachdem ist er einfacher Skalierbar, weil die Clients selber hosten können. Beim Dedicated Server musst du dann üblicherweise Server hinzuschalten um Spitzlast zu überbrücken. Das ist je nachdem nicht ganz so einfach, als Tipp hier Cloud Computing. Es gibt auch Architekturen die auf beides zurückgreifen.


    Für den Spielmodus wird üblicherweise der GameMode benutzt.
    Was genau mit den Räumen meinst du, levels? Level Transition kannst du auch im GameMode regeln.


    Jetzt wie startest du die Server?
    Die UE4 hat das Built in bereits dabei, ja, wirklich!
    Du kannst ihn einfach per Command Line starten. Aber es geht sogar in der Engine unter Play kannst du mehrere Spieler automatisch verbinden oder sogar ein Test Dedicated Server per Checkbox starten.


    Gruss

  • Eine Serverlobby anzubinden ist eigentlich garnicht so schwer.


    Als aller ersten solltest du einen Dedicated Server und einen Client kompilieren/bauen/packen. Im Code hast du die Möglichkeit zu prüfen von wem der Code ausgeführt wird (IsDedicatedServer:bool).
    Wenn ein Dedicated Server deinen Code ausführt, dann soll er sich als aller erstes mal als Server bei einem Masterserver registrieren. Der Masterserver bekommt gesagt:


    "Hey ich bin ein neuer Server mit Namen xxx und Spielerslots 50 und der Map YZ. Damit du lieber MasterServer auch weißt, dass ich noch da bin, sende ich dir alle 5 sekunden einen HeartBeat (Herzschlag)."


    In diesem Heartbeat steht nicht viel drin. Muss ja auch nicht, ist ja nur ein Lebenszeichen.
    Wenn dein Code von einem Client ausgeführt wird, dann fragt er erstmal beim Masterserver an: "Hey Masterserver, ich habe die Clientversion 1.28.0. Bitte geb mir doch mal eine Liste an allen Servern mit denen ich Kompatibel bin!"


    Der Masterserver gibt ihm jetzt eine Liste an allen Servern die sich bei ihm registriert haben zurück. Dieser Masterserver ist klassischer Weise ein Webserver mit einer MySQL DB.
    Um diesen Prozess abzubilden gibt es hier ein Plugin: https://github.com/RyroNZ/UE4MasterServer
    Solltest du Probleme haben, dann kannst du dich gern bei mir melden.


    Viele Grüße :)



    **edit**
    Habe das nochmal grafisch mit all meinen PaintSkills dargestellt:

  • Ist der Webserver auch nötig wenn man steam nutzt? Weil steam fungiert doch dann als Masterserver. Ich kann bspw meinen dedicated Server im Server Browser finden und joinen, und der liegt auf nem externen vserver.

  • Ist der Webserver auch nötig wenn man steam nutzt? Weil steam fungiert doch dann als Masterserver. Ich kann bspw meinen dedicated Server im Server Browser finden und joinen, und der liegt auf nem externen vserver.

    Nein wenn man Steam nutzt ist das nicht notwendig. Steam ist der Masterserver. Steam setzt aber auf das gleiche Prinzip.Sie haben einen Webserver bei denen sich die Dedicated Server registrieren.

  • Das ganze nennt sich übrigends OnlineSubsystem. Das ist quasi ein Interface für verschiedene Dienste. Es gibt ein GoogleOnlineSubsystem, ein SteamOnlineSubsystem, ect ect. So können Anbieter von bestimmten Diensten (z.B. Steam) einfache Schnittstellen zwischen Ihrem System und Unreal schaffen.


    Bei Steam kannst du quasi eine Session erstellen (CreateSession), damit hostest du quasi ein Spiel, und du kannst alle Sessions über das OnlineSubsystem abrufen (FindSessions) und auflisten. Ein Steam Server ist dann der MasterServer und verwaltet die Sessions. Ob du die Session jetzt auf einem Dedicated oder nicht erstellst, ist im Prinzip egal.


    PS:
    Nicht alle OnlineSubsystems haben die gleichen Möglichkeiten. Das GoogleOnlineSubsystem erlaubt es z.B. nicht, Sessions zu kreieren, dafür kann man dort aber auf Globale und Freundes-Ranglisten zugreifen, ect.

  • In diesem Video z.B. führt er eine Server.exe aus. Heißt das, sobald ich diese auf mein PC ausführe, mein PC der Server ist ?


    Video:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • ja. Die Verbindung würde dann über deinen Rechner laufen.
    Beachte aber das wenn du steam nutzt du dies nur über 1 Rechner benutzen kannst bzw 1 steam Account, 1 Rechner.
    Wenn du dann joinen möchtest müsstest du einen 2. Steam Account haben und nen 2. Rechner.

  • Ich habe eine Verständnis frage ,


    Wenn ich ein Multiplayer Spiel für Steam erstelle brauche ich also keinen Server?


    Was ist mit solchen sachen

    • Spieler 1 Hostet dann ein spiel und ist sogesehen der Server?
    • Und wenn Spieler 2 joint teilen sich beide Computer die Aufgabe des Hosts?
    • Wenn Spieler 1 das Spiel verlässt, schließt das Spiel oder bleibt es offen nur spieler 2 ist jetzt Host?
    • Offizieller Beitrag

    Man kennt das doch: Spieler1 erstellt das Spiel und Spieler2 Joint zum Spiel.
    Der Nachteil ist: Wenn Spieler1 seinen Re Rechner ausmacht, kann auch Spieler2 nicht mehr weiterspielen.
    Spieler2 kann allgemein nur Spielen wenn Spieler1 auch online ist.
    @Dj EKI Kann da aber mehr dazu sagen.

    • Offizieller Beitrag

    Sleepy hat schon alles gesagt ^^


    Nur zu Punkt 2 muss ich noch was hinzufügen, da man das auch missverstehen kann. Wenn es nur 2 Spieler gibt, dann ist einer Host und der andere Client. Wenn der Client joint, dann holt sich der Client die aktuellen Daten (falls natürlich alles richtig Progammiert ist). Der Host verwaltet alles, der Client darf nur holen. So geht das auch im ganzen Spielverlauf so weiter. Sogut wie möglich alle Aufgaben an den Host verteilen, damit nicht gecheatet werden kann. Unwichtige Sachen sollte der Client selbst erledigen.


    Zu Punkt 3 gibt es in der GameInstance eine möglichkeit, bei verlusst eines Host einen Fehler Event zu aktivieren. NetworkError und TravelError gibt es. Damit könntest du weiteres Programmieren, was passieren soll.

    • Offizieller Beitrag

    Ich hatte eben diesen Thread durchgelesen und bin öfters darauf gestoßen, dass Steam Server erwähnt wurde. Nicht das hier etwas falsch verstanden wird. Dass hört sich so an, ob Steam Server genutzt werden kann, um ein richtigen Server zu erstellen. Dass ist nach meiner Meinung falsch. Steam stellt keine Root Server zur Verfügung. Steam hat ein Masterserver, der nur für das Lobby System da ist. Der Server ist dann nur der Spieler selbst. Steam hat ein "SteamMatchmaking", der kann Lobbys für seine AppID erstellen, verwalten usw. Spieler 1 erstellt ein Spiel mit CreateSession, die Lobby wird erstellt und Spieler 2 joint mit JoinSession in die Lobby, nach dem die Lobby gefunden wurde. Die Lobby bleibt das ganze Spiel über offen, aber die echte Verbindung ist P2P über Steam API. Die Lobby verwaltet nur die Anzahl der Spieler und die Namen. Sie ist nur zum Finden da. Verliert der Host die Verbindung, somit schließt sich auch die Lobby. Das OnlineSubsystem hat ein weitergeben der Rechte dieser Lobby nicht eingeplant, obwohl Steam das automatisch programmiert hat. Warum auch immer... Solltet ihr Steam als dedicated Server nutzen. Dann nimmt nicht das OnlineSubsystem. Dafür ist das hier da https://partner.steamgames.com…/multiplayer/game_servers . Nachteil man muss den Code selber schreiben. Vorteil ist, dieser dedicated Server benötigt kein Steam Account und es hat ein richtigen Server Browser.

  • OK also braucht man ein eigenen Server aber die sind doch echt teuer, aus spieler sicht kenne ich das zB wenn mann sich ein Minceraft Server Bucht für 30 Spieler zahlt man schon 5 bis 10 euro!


    Wenn ich jz als Entwickler den Spielern ein Server zur Verfügung stellen will muss ich ja 100erte Slots haben oder verstehe ich das wieder falsch?


    Vieleicht ist das jz auch wieder ne andere art von Server?

    • Offizieller Beitrag

    Wenn man von einem Server redet, stellt man sich immer einen Computer vor auf dem ein einziges Minecraft Spiel läuft.
    IN Wirklichkeit laufen auf einem Server Hunderte Spiele gleichzeitig. Ein Server ist ja nur die vermittlungsstelle zwischen mehren Spieler.
    Server sind teuer da sie 24/7 laufen müssen und ne menge Strom brauchen. Du kannst dir auch zuhause nen eigenen Server aufbauen an der Stromrechnung siehst du dann wie viel er dich kostet.
    Mietest du einen Server sind sind diese Server meistens mit neuster Technik und die Server werden auch komplett gewartet. Gewinn und Steuern bezahlst du dann auch mit.


    Wie viele Slots ein Server hat kannst du selber bestimmten.