Jump to content
Unity Insider Forum

MORPG Server


Hiighsky

Recommended Posts

Hey,

 

ich weiß nicht ob das hier schon gefragt wurde, habe jetzt beim durchgucken nicht direkt genau das gefunden was ich brauche.

 

 

Kurz zu dem was ich vorhabe:

 

Ich programmiere an einem kleinen morpg und bin dabei auf Unity umzusteigen ( vorher in Java und OpenGL alles selber programmiert ).

 

Der Server besteht im Grunde aus einem LoginServer, einem MainServer ( dahin connected der Spieler sobald er sich eingeloggt hat ) und mehreren WorldServern ( jeder Worldserver kümmert sich um ein paar Maps ) und einem DatabaseServer alle Server sind untereinander verbunden.

 

Mein erstes Problem wären jetzt die WorldServer:

Die Ki´s ( Mob´s, NPC´S, .. ) sollen wenn möglich nicht durch Wände laufen sondern sich ordentlich bewegen.

Jetzt gibt es ja die Möglichkeit einen "Client" auf einem Linux Server zu starten, allerdings finde ich die Variante nicht so schön, da der Server schnell sein muss und meiner Meinung nach nicht nebenbei Wege berechnen soll.

Gibt es eine Möglichkeit alle möglichen Wege zu "Speichern" das der Server die nicht immer neu errechnen muss? Hab mich mit dem Thema leider noch nicht viel beschäftigt.

 

Mein Gedanke wär jetzt sowas gewesen:

Spieler steht an Position 10,10,1 und die KI an 20, 20, 1

Jetzt guckt der Server in einer "Liste" nach ob ein weg von 20,20,1 zu 10,10,1 existiert und schickt dann den Pfad den er gehen würde an den Client.

Ich wüsste allerdings nicht wie ich das umsetzten kann, bzw die Liste erstelle.

 

 

Eine andere Idee die ich hatte ist die:

Ich erstelle noch einen Server, der einen Client darstellt und sich selber zu einem Server verbindet und dadurch die Ki bewegt, getrennt vom eigentlichen WorldServer.

 

 

Das zweite Problem stellt die Netzwerkverbindung da:

 

Einen Server zu programmieren ( Netzwerk ) ist soweit kein Problem, ich hab jetzt inzwischen schon mehrere kleine Chatserver zum üben Programmiert ( Blocking und Non Blocking )

Das Problem ist eher der Client.

Ich weiß inzwischen noch nicht wo genau ich da meinen Netzwerkcode unterbringe.

In Java hab ich verschiedene Controller gehabt, die zugriff auf die Szene hatten ( InputController, NetworkController ) und konnte so alles steuern.

Wo ich den NetworkController in Unity unterbringe weiß ich nicht.

Den gesamten Netzwerkcode will ich selber schreiben und kein fertiges Framework nutzen.

 

Ich hoffe ihr könnt mir helfen, oder mir einen Thread zeigen in dem das schon behandelt wurde falls einer existiert.

 

Falls jetzt wieder einer mit sowas kommt wie "ein morpg alleine zu schreiben geht eh nicht", .. kann gut möglich sein, für mich ist es ein Hobby und da zählen die kleinen Erfolge und nicht das große ganze :)

 

Danke im Voraus,

Hiighsky

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine Idee die mir grade einfällt:

Du hast auf dem Server eine Schwarz/Weiß Karte, z.B Weiß = True = Begehbar, das Bild ist dann so groß die deine Map

z.B 1000x1000 Kordinaten.

Dann makierst du einfach wo man lang laufen kann und wo nicht.

Dann sollte man einfach mit dem

den Weg berechnen können.

Das Funktioniert natürlich nicht bei jedem Vorhaben, wenn du z.B unter einer Brücke und über eine Brücke laufen willst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Einen Server zu programmieren ( Netzwerk ) ist soweit kein Problem, ich hab jetzt inzwischen schon mehrere kleine Chatserver zum üben Programmiert ( Blocking und Non Blocking )

 

 

Ich will ehrlich mit Dir sein, diese Aussage reicht eigentlich schon um solche threads besser zu ignorieren.

Den meisten ist einfach nicht klar was ein Matchmaking System von MMO Servern unterscheidet, und wie Networking layer aussehen und was sie leisten müssen.

 

Eine Multiplayer Platform mit Schwerpunkt MMO hat sehr spezielle Anforderungen.

Die Architektur und features solcher Systeme bieten nicht nur hohe Sicherheit sondern eine hohe Skalierbarkeit.

 

Neben der Verwaltung von Accounts, dem Server routing zwischen Login, Authentication Servern und Worldservern etc.

ist ein wesentlicher Unterschied zu anderen Mutliplayer Spielen, dass interest management und das eine Instanz im

Schnitt 1000-3000 User unterstützen muß.

 

Hier ist auch der Knackpunkt weshalb man mit Unity network libraries an seine Grenzen stösst, weil das networking

über RakNet läuft und für solche Lasten nicht ausgelegt ist. Nach ein paar 100 CCU in einer Instanz ist wortwörtlich

Sendepause. Während ein Multiplayer mit geringen Anforderungen mit "simplen" UDP Schichten arbeiten kann wird es bei einem MMO schon ziemlich komplex, auch weil man UDP selbst sehr aufwendig erweitern muß oder gleich auf das TCP Protokoll setzt.

 

Unabhängig davon ob Matchmaking oder MMO, für alles gibt es bereits ausgereifte Multiplayer Platforms die sich genau darauf spezialisiert haben, Atavism, Photon und Smartfox.

 

Sie haben sich eben genau darauf spezialisiert, weil die meisten Programmierer nämlich Realisten sind und in der Regel keine Lust haben, solche mächtigen network Layer zu schreiben, sondern Ihre Zeit lieber mit Spiellogik verbringen weil sie sonst Jahrzehnnte brauchen würden um überhaupt von einem MMO reden zu können.

 

Auch wenn Dein Ansatz scheinbar nicht auf die Königsdisziplin MMO abzielt, ist das networking immer das wichtigste, dass man ernst nehmen sollte und wenn für kleine Multiplayer eine simple Masterserver matchmaking Architektur ausreicht, sollten wir erstmal klären weshalb Du ein eigenes networking brauchst und Du glaubst das sei alles kein Problem.

 

Auch Deine Vorstellungen über die Aufgaben eines Servers oder Clients bestätigen das es Dir hier wirklich an Grundlagen und Erfahrung fehlt, was sich übrigens auch auf die Sicherheit auswirkt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn der Server das nicht berechnet, wer macht es dann?

 

Das war vielleicht ein bisschen blöd ausgedrückt, ich meinte damit eher, dass ich es unnötig finde Serverside einen normalen Client zu starten mit allem drum und dran und diesen als Server nutze, wie es scheinbar einige hier machen.

Ein Server sollte meiner Meinung nach so wenig wie möglich haben um möglichst schnell arbeiten zu können.

Das er auf eigene gewisse Art und Weise Pathfinding machen muss um die Ki vernünftig zu bewegen ist mir bewusst.

 

 

Ich will ehrlich mit Dir sein, diese Aussage reicht eigentlich schon um solche threads besser zu ignorieren.

Den meisten ist einfach nicht klar was ein Matchmaking System von MMO Servern unterscheidet, und wie Networking layer aussehen und was sie leisten müssen.

 

Eine Multiplayer Platform mit Schwerpunkt MMO hat sehr spezielle Anforderungen.

Die Architektur und features solcher Systeme bieten nicht nur hohe Sicherheit sondern eine hohe Skalierbarkeit.

 

Neben der Verwaltung von Accounts, dem Server routing zwischen Login, Authentication Servern und Worldservern etc.

ist ein wesentlicher Unterschied zu anderen Mutliplayer Spielen, dass interest management und das eine Instanz im

Schnitt 1000-3000 User unterstützen muß.

 

Hier ist auch der Knackpunkt weshalb man mit Unity network libraries an seine Grenzen stösst, weil das networking

über RakNet läuft und für solche Lasten nicht ausgelegt ist. Nach ein paar 100 CCU in einer Instanz ist wortwörtlich

Sendepause. Während ein Multiplayer mit geringen Anforderungen mit "simplen" UDP Schichten arbeiten kann wird es bei einem MMO schon ziemlich komplex, auch weil man UDP selbst sehr aufwendig erweitern muß oder gleich auf das TCP Protokoll setzt.

 

Unabhängig davon ob Matchmaking oder MMO, für alles gibt es bereits ausgereifte Multiplayer Platforms die sich genau darauf spezialisiert haben, Atavism, Photon und Smartfox.

 

Sie haben sich eben genau darauf spezialisiert, weil die meisten Programmierer nämlich Realisten sind und in der Regel keine Lust haben, solche mächtigen network Layer zu schreiben, sondern Ihre Zeit lieber mit Spiellogik verbringen weil sie sonst Jahrzehnnte brauchen würden um überhaupt von einem MMO reden zu können.

 

Auch wenn Dein Ansatz scheinbar nicht auf die Königsdisziplin MMO abzielt, ist das networking immer das wichtigste, dass man ernst nehmen sollte und wenn für kleine Multiplayer eine simple Masterserver matchmaking Architektur ausreicht, sollten wir erstmal klären weshalb Du ein eigenes networking brauchst und Du glaubst das sei alles kein Problem.

 

Auch Deine Vorstellungen über die Aufgaben eines Servers oder Clients bestätigen das es Dir hier wirklich an Grundlagen und Erfahrung fehlt, was sich übrigens auch auf die Sicherheit auswirkt.

 

 

Ich wollte jetzt nicht weiter auf die ganze Netzwerkthematik eingehen, da das ja nicht speziell meine Frage war, vielleicht war es auch falsch blocking/non blocking zu nennen da es ja noch weitere Möglichkeiten gibt.

 

Das ein Gameserver nicht nur einen Mainloop hat der mal eben alle Anfragen etc beantwortet ist klar.

Wenn du wissen willst wie genau ich vorhabe den Netzwerkcode zu schreiben ( Verbindungen der einzelnen Server, Client zum Server, usw ) dann schreib ich das gerne noch dazu.

Und für Ideen bin ich immer offen.

 

Das es da ein paar Frameworks gibt die sich darauf spezialisiert haben ist mir bewusst, mir geht es aber nicht darum schnell ein Spiel fertig zu bekommen, sondern mir geht es um die Erfahrung.

Mir geht es gerade darum das Netzwerk selber zu schreiben, da es mich einfach interessiert und mir es bis jetzt immer Spaß gemacht hat.

Und wie bereits gesagt, es ist nicht mein Hauptziel das Spiel irgendwann fertig zu haben, ich will es einfach nur programmieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...