Jump to content
Unity Insider Forum

Unet headless Server. Was ist nötig?


Overload

Recommended Posts

Moin liebe Leute, 

nachdem ich nun die Google Technik verworfen habe, arbeite ich nun mit unet und habe auch bereits einen headless Server auf Linux laufen. 

Meine Frage ist nun, was genau ist für den Server notwendig um die player zu connecten? Ist es wirklich nötig dass der Server das gesamte Spiel enthält oder reicht es, dass man den networkcontroller einfügt und die Server Logik schreibt? 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe früher mal Flappy Bird Clon in Multiplayer gemacht. Dort wurde allerdings alles Clientseitig gemacht. Auf jeden war auf dem Server die Scene komplett leer. Nur die Figuren war da zu sehen. Das war nur das alte System. In der neuen System UNet sollte auch sowas funktionieren.

Sollte aber nicht Clientseitig sein und der Server müsste über vieles Bescheid wissen, z.B. wo man hin kollidiert usw., dann würde ich den Server gleich lassen wie beim Client.

Kurz gesagt: Muss nicht alles drin sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi MaZy,

vielen Dank für deine Antwort. Nur leider komme ich irgendwie nicht weiter ^^
Du sagst, dass nicht alles drin sein muss und aber, dass es technisch aber einfacher wäre wenn der Server den Content auch hat. Habe ich das richtig verstanden ?

Mein Hintergrund ist der, dass ich über eigene matchmaking- und servercloudscripts die Gameserver bei bedarf instanziiere/starte und beende. Dafür sollten die dinger so schlank wie möglich sein ohne, dass der aufwand extrem groß wird.

stellt sich mir zusätzlich auch noch die frage der sicherheit (cheating)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also für den Matchmaking brauchst du kein "Content". Das ist ja pure Kommunikation. 
Beim Gameserver musst du halt gucken was du brauchst und was nicht. Deswegen hab ich ja bei mir als Beispiel gesagt, dass alles Clientseitig war. Also der Server muss nichts berechnen. Er kommuniziert nur während. Da kann man aber locker cheaten. Bei Serverseitigen, kann man sehr schwer bis gar nicht cheaten.

Als Beispiel daher hab ich gesagt Kollision. Nehmen wir an, dass es Serverseitig sein soll. Spieler können rumlaufen, können gegen Wände laufen. Bei sowas ist natürlich Server mit Content natürlich gut. Woher sonst soll der Server später wissen können, ob der Spieler kollidiert ist. Sonst kann man ja Cheaten und durch laufen.

Ich kann mich gut erinnern, da war mal früher ein Multiplayer Beispiel in Unity. Das konnte man runterladen. Da hat einer die Map einfach größer gemacht und fuhr mit einem Auto rum. Bei mir schwebte er in der Luft, weil bei mir die Map ja nicht so groß war. Das war clientseitig. Wäre das serverseitig wäre er trotzdem runtergefallen, weil ich gehostet hatte und dürfte nicht rumschweben.

 

Wenn deine Map nicht riesen groß ist und viele Daten hat dann sollte schnell gehen. Vergleichbar würde ich jetzt Rocket League sagen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein, das Level ist relativ klein. Um genau zu sein passt das sogar auf einen bildschirm ohne scrolling ^^

Du hast nicht zufällig ne gute erklärung für authoritative server ? =)

EDIT: Jetzt komme ich grad ein wenig ins schleudern. Jetzt lese ich grad von Dedicated Master Server, GameServer und Clients ?
Zum jetzigen Zeitpunkt habe ich eine kopie vom spiel mit ein paar änderungen als headless server laufen bzw starte weitere auf anderen ports bei bedarf (noch zu testzwecken).
Ich verstehe grad den unterschied zwischen den Servern nicht bzw wie diese zusammen funktionieren.

Zum einen habe ich gelesen, dass man einen dedicated master server zum matchmaking benutzt, aber nicht was für komponenten notwendig sind. DIe logik nachher ist klar. Dann die Gameserver und clients ? irgendwie etwas konfus für mich ^^ hilfe bitte, ich komme nicht weiter

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • GameServer
    • (In Unity) Headless Server oder allgemein Dedicated Server genannt. Mehr dazu weiter unten.
    • Listenserver -> Bedeutet einfach nur, dass du zwar den Server startest, aber du auch gleichzeitig Spieler bist. Kurz gesagt: Du bist Client und Server zugleich. 
    • Clients -> Logischerweise die Spiele/Spieler, die das Spiel beitreten oder allgemein sich mit irgendwem verbinden (muss nicht ein Spiel sein).
  • Masterserver
    • Ist allgemein Begriff für ein Server, der meistens mit anderen Server "redet"
      • Loginserver -> Du startest das Spiel, verbindest mit dem Masterserver (meist automatisch) und er sagt dir, dass Loginserver gerade nicht geht.
    • Matchmakingserver -> Beispiel: Wenn du einen GameServer startest wird an Matchmakingserver die Daten gesendet (IP, Servername, Gamemode usw). Hab aber das Gefühl, dass manche dazu auch Masterserver sagen, weil er ja auch regelt mit wem du verbinden kannst und nicht. Bin mir aber da nicht sicher.
    • In Dota zum Beispiel nennen sie es der Coordinator. 
  • Dedicated Server = Root Server - allgemein und nicht auf Spiele bezogen
    • Heißt einfach nur Allgemein, dass der Server(also ein Computer als Server) irgendwo gehostet ist und 24/7 läuft und eigentlich mit niemanden seinen Ressourcen teilt. Also einfach nur ein Server sein.
    • In Unity nennt man sie auch Headless Server, weil Headless Server dafür sorgt, dass der grafische Teil einfach nicht geladen werden soll, weil man in dem Falle sie nicht braucht. Man spart natürlich Ressourcen. Headless Server laufen auch ausschließlich im Hintergrund bzw. per Konsole.
  • Virtueller Server = VServer
    • Das gleiche wie oben, nur dass man die Ressourcen teilt. Meistens teilt man einen Server(also wieder ein Computer), mit 10-50 Leuten.
Link zu diesem Kommentar
Auf anderen Seiten teilen

MaZy langsam wirst du mein Held ^^

Endlich mal vernünftige erklärung. vielen dank dafür.

ist denn meine vorgehensweise richtig? Ich starte eine Kopie vom Spiel als Headless server starten, in der Start() bau ich dann den server mit StartHost() und lösche den Player0. Oder denke ich da falsch ? 

Und den technischn Hintergrund eines authoriativen server habe nur oberflächlich verstaden.

Sry für die vielen Fragen.. :-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja hab auch einfach so mit StartServer gemacht.

EDIT: Bei Headless Server solltest du StartServer machen und nicht StartHost. Bei StartHost wird auch der Server eine Spielfigur vergebem bzw zugewiesen. Soll ja aber nicht sein. Daher StartServer. Du muss da auch kein Spieler / Spielcharakter löschen, da ja keinen gibt ^^.

Kannst ja hier zb einfach joinen und testen.

EDIT: Link entfernt.

Hab mal Server gestartet. Da tue ich einfach nur das: 

	// Use this for initialization
	void Start () {
        if(Application.platform == RuntimePlatform.LinuxPlayer)
            manager.StartServer();

        connectButton.onClick.AddListener(delegate { OnClick_Connect(); });
        dcButton.onClick.AddListener(delegate { OnClick_Disconnect(); });
	}

EDIT2: Server ist wieder offline.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 weeks later...

Naja headless ist wie paar mal erklärt nichts anders als wenn man bei NetworkManager und NetworkManager UI auf "Server Only" drücken würde. Allerdings ohne den grafischen Teil. Das heißt, man startet etwas aber ohne den grafischen Teil / Treiber usw nicht zu laden. 

Ein Beispiel ist ja Mining Welt. Die meisten Mininggeräte haben keine grafische Oberfläche. Sie sind jedoch mit anderen Programmen verbunden (Console). Somit kann man trotzdem noch einsehen oder steuern. In anderen Worten ein Monitor, 100 Mininggeräte.

Synchronisierung ist ja andere Geschichte. Das hat ja nichts damit am Hut.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nee hab leider kein Tutorial dafür.

Ich hab ja nur von der Möglichkeit gesprochen und nicht wie es geht. Wie aber in andern Post geschrieben reicht ein Server zu starten die Funktion StartServer() über den NetworkManager.

Nach dem Builden kannst du command line benutzen. 
-batchmode : Damit es im Hintergrund startet. Zur Testwecken würde ich das weglassen.
-nographics : Grafiken werden nicht geladen. Zur Testzwecken, würde ich die Grafiken natürlich am Windows laden.

Im Code musst du halt jetzt selber da gucken wie du das machst. Ich hab Beispiel sowas mal gemacht  -port 24130 -server  . Da hab ich eine Leere Scene als erste Scene genommen und geguckt, ob es allgemein -server gefunden hat, wenn nicht dann normal starten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...