Multiplayerkommunikation / 39dll

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Multiplayerkommunikation / 39dll

    Guten Tag,

    ich hätte wieder mal eine allgemeine Frage.
    Ich bin mittlerweile recht erfahren in Sachen Netzwerkprogrammierung, besonders mit 39dll, aber auch in C# usw.
    Mir fällt es immer wieder auf, dass Spiele, die mit 39dll geschrieben sind und sehr viel Anfragen an den Server senden, zu laggen beginnen.
    Es reicht bereits, wenn zwei Clients ca. 5-10 Requests/Sekunde an den Server schicken, und ensteht ein riesen Delay.
    Sachen wie z.B. RTS-Spiele oder Shooter sind dadurch nicht zu realisieren.

    Bei meinem größten Projekt (SCO) habe ich bereits Tests gemacht, mit ca 10 verschiedenen Clients, samt 20-30 NPCs, die nur alle 5 Sekunden ihre Position verändern, und es hat wieder mal gelaggt ohne Ende. (Manche Abläufe waren um fast 20 Sekunden verzögert)

    Meine Frage: Liegt dieses Gelagge an GML und/oder 39dll? Oder mache ich einfach was falsch bei der Programmierung?
    Ich habe meinen Code bereits perfekt gekürzt, dass nurnoch das mindeste übertragen wird, und auch nur wenn es nötig ist.

    PS.: Entschuldigt Rechtschreib- und Grammatikfehler, es hat hier gerade 39°C QQ
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Meine Frage: Liegt dieses Gelagge an GML und/oder 39dll? Oder mache ich einfach was falsch bei der Programmierung?
    Ich habe meinen Code bereits perfekt gekürzt, dass nurnoch das mindeste übertragen wird, und auch nur wenn es nötig ist.

    Profiler (auch wenn das beim GM wohl weniger anwendbar ist) dran ansetzen, schauen wo was am längsten dauert (z.B. mit HighResolutionTimer DLLs, (siehe QueryPerformanceCounter)).

    Bedenke das es möglicherweiße große Delays bei TCP kriegt weil die Nachrichten in richtige Reihenfolge ankommen müssen und erst gewartet muss diese auch angekommen ist (im Gegensatz zu UDP) (liege ich da richtig?). Bei einem Loopback dürfte das wohl nicht auftreten.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Das kann sehr viele Gründe haben. Höchstwahrscheinlich liegts auch am Server, der ja viel mehr Abfragen bearbeiten muss als die Clients, wenn der nicht mehr mitkommt, merkt man das dann logischerweise auch bei den Clients. Grundsätzlich gilt, den Server so wenig wie möglich zu belasten und den Client so viel Arbeit wie möglich selbst erledigen zu lassen, soll sich ein Objekt z.B. drehen reicht es doch, den Winkel zu dem es sich drehen soll zu übertragen, anstatt solange die Drehung stattfindet Datenpakete nach draußen zu hämmern.

    © 2008 by Teamgrill Productions
  • MasterXY schrieb:

    ...den Client so viel Arbeit wie möglich selbst erledigen zu lassen, soll sich ein Objekt z.B. drehen reicht es doch, den Winkel zu dem es sich drehen soll zu übertragen, anstatt solange die Drehung stattfindet Datenpakete nach draußen zu hämmern.

    Genau das habe ich auch gemacht. Ich lasse nur das mindeste übertragen, zB die Zielkoordinaten eines Spielers, anstatt jeden step die derzeitigen Koordinaten zu übertragen.

    Und Henrik, Danke für den Tipp.
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • henrik1235 schrieb:

    Bedenke das es möglicherweiße große Delays bei TCP kriegt weil die Nachrichten in richtige Reihenfolge ankommen müssen und erst gewartet muss diese auch angekommen ist (im Gegensatz zu UDP) (liege ich da richtig?)

    wenn dir eine schnellere übertragung wichtiger ist als eine sicherere/fehlerfeiere übertragung...dann - ja :)
    ich denke auch - UDP,OC
    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
    (Albert Einstein)