Dedi. Server und Client - Unrealprojekt

  • Hallo Leute,


    Rein von der ersten Betrachtung aus gesehen, wären für mich Server und Client 2 verschiede Projekte, da Code sowohl vom Client und als von Server eigentlich nicht in das selbe Projekt rein gehören und im Grunde genommen auch 2 verschiedende Programme sind. Die einzige gemeinsamkeit bestünde darin, das sie mit einander Kommunizieren können.

    Bei Unrealprojekten scheint das aber anders zu sein. Ich hab 2 Projekte angelegt. Von einem Projekt habe einen Dedi Server gebaut. Mit dem anderen Projekt hab ich versucht, mich mit dem Server zu verbinden. Geklappt hat hat das nicht.


    Nur um sicher zu gehen die Frage:


    Ist das möglich Server und Client in 2 seperate Projekte aufzuteilen oder müsste ich den Engine dazu aufbohren, damit das evtl. möglich ist?


  • Hallo

    Server und Client Code ist getrennt. Die Verwirrung kommt vermutlich von Listen Server, weil dort der Client1 gleichzeitig das Spiel hosted sozusagen, während du mit dem Dedicated Server einen dedizierten Server auf den sich die Clienten verbinden, auch der Client1.

    Du brauchst keine 2 Projekte der UE4 zu diesem Zweck.

    Du hast so auch Möglichkeiten zu kontrollieren was auf dem Server und was auf dem Client laufen soll.

    Wenn du da eine spezifische Frage hast, kann ich dir vermutlich helfen.

    Gruss

  • Hallo Leute,


    Rein von der ersten Betrachtung aus gesehen, wären für mich Server und Client 2 verschiede Projekte, da Code sowohl vom Client und als von Server eigentlich nicht in das selbe Projekt rein gehören und im Grunde genommen auch 2 verschiedende Programme sind. Die einzige gemeinsamkeit bestünde darin, das sie mit einander Kommunizieren können.

    Das stimmt nicht.

    Unreal Engine benutzt ein Authorative Server Networking. Das heißt in einfach: Alles wird auf dem Server simuliert und er hat immer recht. Auf clients wird hauptsächlich nur mit der simulation auf dem server synchronisiert, damit der Client das sieht was auf dem Server passiert.

    Ein Objekt hat einen Besitzer. Ist in der Kette von Besitzern irgendwo ein PlayerController drin, so zählt dieser Controller (= Spieler) als Owner und darf dem Server über RepCalls Funktionsaufrufe senden. Dies ist z.B. wichtig für Spieler Charaktere.


    Der große Unterschied zwischen Server und Client Code ist, dass ein Dedicated Server nichts rendern muss. Zur optimierung sollte man daher ein wenig mit precompiler statements arbeiten und unnötige Code Stellen für einen dedicated Server Build ausschließen.

  • Hallo Tomura,


    Mein erster Absatz ist eher eine grobe, allgemeine Betrachtung eines Clients und einem Server, lösgelöst von irgendwelchen Game Engines.


    Wie das dann im Detail aussieht hängt vom der gewählten Engine ab. In diesem Fall von der UE.

    Meine Befürchtung ist eher umgekehrt, das im Client Codefraqmente enthalten sein könnten die eigentlich ausschließlich zum Server gehören und auch nur vom Server ausgeführt werden sollten, wobei man eigentlich ja die precompiler statement hat.

  • Beim packen des Projektes wird eine Versionsnummer vergeben. Packt man den Server in einem anderen Projekt als den Client oder sogar wenn man was ändert und dann nur Server oder Client erstellt wird eine andere Nummer vergeben für Server und Client. Passt die Nummer nicht wird der Client vom Server gekickt.


    Die Nummer kann man aber in C++ überschreiben und dort einfach immer dieselbe zurückgeben. Damit sind unterschiedliche Server und Clients möglich die sich verbinden.

    Habe ich öfter genutzt wenn ich z. B. eine Textur verändert habe. Da habe ich nur den Client neu erstellt. Der Server hat mit Texturen eh nichts am Hut. Damit war auch möglich sich auf den Server zu verbinden vom Editor aus.


    Wenn man aber an den Server/Client (Events) rumschraubt und die unterschiedlich sind dann knallts. Ich kann mich nicht mehr erinnern obs da nen Absturz oder nur ein Disconnect gab.