Ich habe die Anfänge eines kleinen Multiplayer-Spiels, das ich in Python als Lernübung schreibe. Derzeit läuft der Server mit 10 fps, während die Clients mit der von ihnen gewünschten Geschwindigkeit laufen. Dies funktioniert gut, um Bandbreite zu sparen, aber wenn der Client dem Server nicht mitteilt, wann seine Eingabe erfolgt ist, werden alle Eingaben in Intervalle von 100 ms quantisiert. Wie kann ich die Zeit zwischen Client und Server synchronisieren, damit ich diese Korrekturen vornehmen kann? Eine große Hürde hier ist, dass ich Ping-Zeiten ermitteln und kompensieren muss.Synchronisieren der Zeit zwischen einem einfachen Python-Socket-basierten Server und Clients
Antwort
Ich zufällig zufällig auf excruciatingly fine blog post auf wie verteilte Netzwerk Physik im Allgemeinen (ohne traditionelle Client-Vorhersage) zu tun. Ich empfehle es sehr, zusammen mit den GDC Folien, die Fiedler vor ein paar Jahren vorgestellt hat. Viel Glück!
Danke, ich erinnere mich an diese Blogbeiträge von vor langer Zeit, als die Serie unvollständig war. Das letzte zum Thema Networking ist großartig und sollte viel helfen! – Alex
Dies ist eine sehr interessante Frage. Leider gibt es keine einfache Antwort. Sie müssen nur das Problem gut verstehen und sich für eine Lösung entscheiden, die gut genug ist für Ihre Anwendung.
Mein erster Instinkt war, dass die Network Time Protocol (NTP) zum Einstellen der Maschinenuhren von NTP-Servern dieses Problem adressiert hätte. Eines der dort angesprochenen Probleme betrifft Jitter Buffers, woraus sich packet delay variation ergibt. Dies wird in RFC 3393; IP Packet Delay Variation Metric for IP Performance Metrics (IPPM) ausgearbeitet.
Ich werde in NTP schauen, das kann tatsächlich einen Einblick in meine Situation geben. – Alex
- 1. Welches Netzwerkprotokoll wird verwendet, um Ressourcen zwischen einem Server und mehreren Clients zu synchronisieren
- 2. JS-Zeit zwischen mehreren Geräten synchronisieren
- 3. Synchronisieren Sie die Zeit zwischen einer Android-App und einem Server
- 4. Verzeichnis der Dateien zwischen Server und iOS-Anwendung synchronisieren
- 5. Was ist der Unterschied zwischen einem lokalen node.js Server und einem einfachen HTTP-Server python
- 6. Synchronisieren Server Uhren in einem Ringmuster
- 7. SQL Server zwischen Zeit
- 8. beste Möglichkeit zum Synchronisieren der Daten zwischen Business und Datenbank
- 9. Zähler der gedienten Clients in einem einfachen Server mit Python + verdreht
- 10. Lösung für optimistische Objektreplikation zwischen Java-Server und Browser-Clients?
- 11. Synchronisieren der Zeit zwischen zwei PCs über TCP/IP, kein Server
- 12. wie Windows-Zeit von einem NTP-Zeitserver in Befehl synchronisieren
- 13. Wie synchronisiert man microphysics.js zwischen Clients?
- 14. Datenverkehr zwischen Squid und Clients verschlüsseln
- 15. Server und Clients auf einem Rechner ausführen (NetBeans 8.1)
- 16. Server und Clients auf einem Rechner laufen lassen (Netbeans 8.1)
- 17. C# und C++ Synchronisieren zwischen Prozessen
- 18. Wie man einen einfachen Multithread-Socket-Server in Python erstellt, der sich an Clients erinnert
- 19. Sync zwischen Sql Server und Mysql Server
- 20. Unterschied zwischen einfachen und komplexen Aussage - Javascript
- 21. c/C++ - konvertieren zwischen Unix-Zeit und der "Gregorianischen Zeit"
- 22. Dateien zwischen Windows Phone und Skydrive synchronisieren
- 23. JAVA - Schwierigkeiten mit einem einfachen Server, der die Klienten sieht
- 24. Wie ssh-Verbindung zwischen Server mit mehreren Clients loswerden?
- 25. Zwischen "Zeit" und "für" -Funktionalität?
- 26. Verschieben Fenster zwischen tmux-Clients
- 27. Java Servlets, JSP und Datenübertragung zwischen zwei Clients
- 28. Wie Synchronisieren Android Database mit einem Online-SQL Server?
- 29. Java: Simultane MySQL-Abfragen von mehreren Clients synchronisieren
- 30. Zeit Umwandlung zwischen Zeitzonen
Die Antwort, die die meisten anderen Spieleentwickler haben, ist, dass (im Grunde genommen) Sie nie eine gute Synchronisation bekommen werden. Große Spiele wie wow und kin simulieren die meisten Aktionen auf der Client-Seite und pushen Updates in beide Richtungen. –