Mutlithreading und nutzerverwaltung vieler nutzer



  • Kennt jemand dazu gute Tutorials.
    Ich bin Serverentwickler bei einem online Rollenspiel, momentan werden alle änderungen der Spielwelt in einer einzigen mainloop behandelt.

    Im grunde läuft es so, ein Spieler loggt ein und es wird ein datenempfangs und ein datensendethread für den Spieler erzeugt. Wenn daten ankommen liest der datenempfangs thread diese aus und wenn ein command (irgend eine änderung der spielwelt) vollständig empfangen ist kommt das teil in eine queue.

    Der Sendethread liest daten aus einer anderen queue und packt die daten auf eine TCP/IP verbindung.

    Bei 40 Spielern sind das 80 Threads dazu kommen der main loop thread der die Änderungen der Spielwelt gesammelt aufnimmt und abarbeitet und der thread welcher die tcp/ip connections annimmt.

    Die frage ist, ist das schon zuviel? Sollte man das herunter schrauben? So das ein Sende thread mehrere Nutzer abarbeitet um Thread umschaltzeiten zu minimieren. Oder ist das ok und wir sollten abarbeitung der der Welt so ändern das dort mehrere Threads z.B. für verschiedene Gebiete zuständig sind bzw für eine entsprechende anzahl nutzer ein thread die welt ändert.

    Da bräuchte ich dann ggf einen ansatz wie ich das mit mutexen absichere damit dort keine überschneidungen sind. Ggf irgend ein dokument oder tutorial welche ansätze es für sowas gibt.



  • So an die 100 Threads sind normal kein Problem. Ab 500 würde ich anfangen mir ernsthaft Gedanken zu machen. Wenn du die Threads allerdings z.B: nur brauchst um damit asynchrones IO zu simulieren würde ich dir empfehlen dir mal die Boost.ASIO anzugucken. Nicht dass du die dann verwenden musst, aber das Design der Library bzw. wie man dann mit so etwas arbeitet könnte für dich interessant sein.

    Wie man am einfachsten mehrere Threads verwendet um eine Welt zu aktualisieren kann ich dir leider nicht sagen, hab noch nie einen (M)MOG Server programmiert, und kann mich jetzt in 5 Minuten da auch nicht weit genug reindenken dass ich irgendwelche Tips abgeben kann die mehr als nur komplett dahergeraten sind 😉



  • das mit den boost.ASIO ist sehr interessant ich denke das kann ich schon sinnvoll verwenden. Aber dann muss ich wohl trotzdem irgendwie noch die spielewelt aufbohren. Denn es besteht die meinung das es halt laggt wenn sehr viele spieler on sind. Das netzt scheint noch nicht so sehr das problem zu sein.


Anmelden zum Antworten