Server anpingen

  • GM 8

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

  • Server anpingen

    Gibt es eine möglichkeit, die Funktion

    GML-Quellcode

    1. execute_shell("ping",IP);

    so ausführen zu lassen, dass keine CMD Box aufgeht und der Ping ausgelesen wird, also als direkte Variable in Game Maker?

    Oder gibt es eventuell eine Dll, um Server anzupingen?
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Ich würde mal davon ausgehen, dass es eine DLL dafür gibt, aber ich hab keine funktionierneden Links bei einer kurzen Suche gefunden.

    Unabhängig davon: Bist du dir sicher, dass du einen "ICMP echo request" Ping brauchst? Wenn du für ein Netzwerkspiel Feedback über die Performance haben willst wäre es klüger, eine eigene Pingfunktionalität innerhalb deiner eigenen Architektur zu implementieren. Das ist sehr viel Aussagekräftiger, da hier neben der eigentlichen Netzwerklatenz auch Faktoren wie überlastete Server im Ping berücksichtigt werden.
  • boxxar schrieb:

    Ich würde mal davon ausgehen, dass es eine DLL dafür gibt, aber ich hab keine funktionierneden Links bei einer kurzen Suche gefunden.

    Unabhängig davon: Bist du dir sicher, dass du einen "ICMP echo request" Ping brauchst? Wenn du für ein Netzwerkspiel Feedback über die Performance haben willst wäre es klüger, eine eigene Pingfunktionalität innerhalb deiner eigenen Architektur zu implementieren. Das ist sehr viel Aussagekräftiger, da hier neben der eigentlichen Netzwerklatenz auch Faktoren wie überlastete Server im Ping berücksichtigt werden.


    Das habe ich bereits versucht.

    Der Client sendet einen byte (1) an den Server, der Server sendet ihn wieder zurück.
    Das Problem: Da bei Game Maker Steps=FPS=Speed ist, kann man das bei einem room_speed von 60 nicht genau berechnen.
    Ich erhalte lokal einen Ping von 33,3ms, was praktisch unmöglich ist.
    Wenn ich aber den room_speed auf 1000 erhöhe, erhalte ich einen realistischen Ping, auch von anderen Clients aus.
    Ich kann in meinem Spiel aber keinen room_speed von 1000 benutzen, da es das gesamte Spiel zusammenhauen würde.

    Mein Code sieht wie folgt aus:

    GML-Quellcode

    1. //Sobald der Ping vom Server den Client wieder erreicht:
    2. Ping = (1000/room_speed)*pingDelay
    3. //Wobei pingDelay die Steps sind, die das Paket benötigt.
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Ich habe in 1 gegen 1 fußball nen ping, moment, ich such das mal kurz....

    Create:

    GML-Quellcode

    1. timer=0
    2. ping=1000
    3. pong=0


    EndStep:

    GML-Quellcode

    1. if global.master{
    2. timer+=1
    3. if timer>90{
    4. writebyte(5)
    5. writebyte(ping)
    6. timer=0
    7. }
    8. //hier ist der empfangen-switcher
    9. case 5:
    10. ping=timer
    11. break;
    12. //Und hier ist der switcher zu ende
    13. }
    14. else{
    15. //hier ist der empfangen-switcher
    16. case 5:
    17. ping=readbyte()
    18. pong=1
    19. break;
    20. //Und hier ist der switcher zu ende
    21. if pong{
    22. writebyte(5)
    23. pong = 0
    24. }
    25. }
    Alles anzeigen


    Draw:

    GML-Quellcode

    1. if global.master==true
    2. draw_text(200,10,"Host")
    3. else
    4. draw_text(200,10,"Client")
    5. draw_text(90,10,"Ping: "+string((ping/30)*500)+"ms")
    6. draw_text(90,25,"( ="+string(ping)+" step(s) )")


    Ich hoffe, du kannst damit was anfangen
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Larsi ()

  • Es spielt doch eigentlich überhaupt keine Rolle, das du das Gefühl hast, diese Pings seien unrealistisch? Das sind die realen Latenzen, die bei dem Spiel entstehen. Durch die begrenzte room_speed hast du nunmal effektiv einen Ping von mindestens 1/room_speed. Selbst wenn das Netzwerk schneller ist, dann spielt das keine Rolle, weil du durch alles was schneller ist als 1/room_speed nichts mehr gewinnst, die Spiellogik selbst arbeitet halt nicht schneller.
  • Ich versteh deine Frage nicht ganz. Wenn du wissen willst, wieso Larsi statt 1000 den Faktor 500 benutzt: Er berechnet nur den halben Ping. Der Ping ist ja der gesamte Roundtrip, also von A nach B und wieder zurück. Die Zeit, die du von A nach B brauchst, ist dann natürlich groß geschätzt nur halb so groß. Man kann sich jetzt streiten, welche von beiden Angaben sinnvoller ist.
  • Benutzer online 1

    1 Besucher