kostenloser Webspace werbefrei: lima-city


Minecraft Serverstruktur

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    m*****z

    Hallo tag/leute">Leute,

    mir schwirrt schon die letzten 3 Tage die Frage durch den Kopf wie wohl so ein Minecraft Server funktioniert und zwar nicht so grob, sondern ganz genau.

    Mir ist klar, dass die Blöcke und deren Werte wohl in einer Art Datenbank stehen werden und/oder in mehrdemensionalen Arrays gespeichert wird. Doch wenn sich nun ein neuer Spiel einloggt muss die Welt doch neu heruntergeladen werden, ist das nicht viel zu viel Traffic?
    Nehmen wir an wir laden die Sichtweite von 10x100x100 (Höhe x Breite x Länge) Blöcken, das wären 100.000 Blöcke, mit einer dreistelligen DataID, wären also mindestens 300.000 einzelne Zeichen.
    Das jede Sekunde laden und dabei noch Dateneinträge ändern und das ganze bei ca. 15 Spielern. <--- Ordentlich Traffic und Leistung nur für die Landschaft, hinzu kommen noch Monster- und Spieleraktionen und zb. das Inventar.

    Wie ist das ganze denn nun gespeichert und wie wird es verwaltet?
    Bitte bringt Licht ins Dunkel!

    MFG Monkeyz

    PS: In der Java Kategorie, weil die Server immerhin in Java geschrieben sind.

    Beitrag zuletzt geändert: 21.2.2013 17:17:01 von monkeyz
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wieso sollte man denn alle Blöcke neu schicken, wenn sich nichts daran geändert hat? Am Anfang sendet der Server die Umgebung, dann nur noch die Blöcke, die sich ändern oder durch Laufen dazukommen. Deswegen dauert das Generieren am Anfang auch so lang.
  4. Autor dieses Themas

    m*****z

    Danke für die Antwort!

    Aber wie funktioniert das Zusammenspiel von Server und Spiel, bei der Erkennung von alten und neuen Blöcken ?
    Sendet das Spiel mit wann zuletzt aktualisiert wurde und der Server sendet nur das was nach diesem Zeitpunkt geändert wurde oder wie läuft das ab?
    Und wie werden die Blöcke nun genau gespeichert ? kann man sich das wie eine "mysql-datenbank" vorstellen oder mehr als Array?

    Beitrag zuletzt geändert: 21.2.2013 18:00:23 von monkeyz
  5. i***********e

    Hallo.

    Der Client also auf deinem PC, sendet dem Server, welcher Block gerade verändert wurde, sei es von abbauen, platzieren oder Interaktion mit jeglichen anderen Blöcken.
    Der Server sendet dem Client bei jeder Session die Chunks vom Spawn. Das können mehr oder weniger sein (Render Distance). Wenn du durch die Welt läufst dann werden einfach die weiteren Chunks geladen. Das sind im normalfall zwar etliche Daten, die sich aber nicht wirklich auf deinen Interent Speed auswirken, da ein normaler Block nur aus x,y,z Koordinaten und der Block ID bestehen. Das ist ganz fix übertragen da die Bandbreite dafür bei den meisten Leuten ausrecht. Da kommen vielleicht nichteinmal 5up/download MB pro Stunde zusammen. Das ist nicht sehr viel.
    Vor 10 Jahren wäre das wegen der Rechenleistung und wegen der Bandbreite nicht möglich gewesen. :)

    Grüße Fred.
  6. monkeyz schrieb:
    Hallo Leute,

    mir schwirrt schon die letzten 3 Tage die Frage durch den Kopf wie wohl so ein Minecraft Server funktioniert und zwar nicht so grob, sondern ganz genau.

    Mir ist klar, dass die Blöcke und deren Werte wohl in einer Art Datenbank stehen werden und/oder in mehrdemensionalen Arrays gespeichert wird. Doch wenn sich nun ein neuer Spiel einloggt muss die Welt doch neu heruntergeladen werden, ist das nicht viel zu viel Traffic?
    Nehmen wir an wir laden die Sichtweite von 10x100x100 (Höhe x Breite x Länge) Blöcken, das wären 100.000 Blöcke, mit einer dreistelligen DataID, wären also mindestens 300.000 einzelne Zeichen.
    Das jede Sekunde laden und dabei noch Dateneinträge ändern und das ganze bei ca. 15 Spielern. <--- Ordentlich Traffic und Leistung nur für die Landschaft, hinzu kommen noch Monster- und Spieleraktionen und zb. das Inventar.

    Wie ist das ganze denn nun gespeichert und wie wird es verwaltet?
    Bitte bringt Licht ins Dunkel!

    MFG Monkeyz

    PS: In der Java Kategorie, weil die Server immerhin in Java geschrieben sind.
    Das wird in einem eigenem Vormat gespeichert.
    sieheMinecraftwiki
    Dort ists irgendwo erklärt.
    Ich hoffe ich konnte helfen!.
  7. Ich habe selber mal an einem Voxelprojekt gearbeitet ( Allerdings smooth Terrain und nicht "bloxel" ;) ) und kam schnell zu der Problematik: Wohin mit all den Daten?!

    Ein Chunk mit 64x64x64 Voxeln Kantenlänge hatte einfach mal schlappe 2MiB auf der Festplatte. Die Lösung war sehr simpel und extrem schnell:
    RLE! Runtime Length Encoding.

    Der Algorithmus schaut einfach wie oft sich ein Wert wiederholt... und packt ihn quasi in Päckchen.
    Aus "aaaabccbbbdddddaaa" wird das wesentlich kürzere "4a1b2c3b5d3a".

    Bei mir (Sehr abwechslungsreiches Terrain) hat alleine diese Kompression dazu geführt, dass die Dateien am Ende nur noch 200-400kb groß waren.

    Und das mit sehr schwacher Kompression. Minecraft benutzt dazu, wenn ich recht informiert bin, kleinere Chunks mit viel mehr Wiederholungen. Ein Chunk wird sich dabei wirklich SEHR stark komprimieren lassen.


    Kurzum: Minecraft streamed Chunks übers Netzwerk. Und das ohne viel Aufwand.
    ( Zum Vergleich: Ich 64^3, Minecraft 16x16x256 ... 262144 VS 65536 per Chunk)



    Soweit mein kleiner Exkurs zu: Voxelterrain -> Stream it or leave it. :P

    Beitrag zuletzt geändert: 22.2.2013 13:23:17 von adrians
  8. Hallo :wave:

    Habe vor kurzem die Erfahrung gemacht, dass Minecraft wohl ~600KB-1MB beim Joinen überträgt, zumindest hat es bei einer Serverbandbreite von 10KB/s ~1 Minute gedauert bis nach login und authentifizierung mit authme alles problemlos funktionierte.
    Das ist natürlich eine sehr vage Beobachtung, die wohl auch von den installierten Plugins und vielleicht ein bisschen auch von der Weltgröße abhängt. Ich wollte eigentlich mal mit netmeter messen, aber das funktioniert irgendwie nicht bei mir auf Windows 7..

    mfg :wave:
  9. Der Client baut einen Block ab, setzt einen Block oder verändert einen Block, das Packet wird zum Server gesendet und nach einem Tick sendet der Server die Welt zum Client.

    Ich hoffe das reicht an Information aus.

  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!