29.07.2011, 22:30 by dcode
Vielleicht für das Verständnis, wie es überhaupt dazu kommt: Der Server läuft immer 2,5 Sekunden "vor". Das erklärt auch die Bau- und Upgradezeit von 2,5 Sekunden. Erhält der Client nun eine Nachricht vom Server für Runde X, der Client ist aber schon bei Runde X+1, dann hat das Paket länger als 2,5 Sekunden gebraucht und ist demnach nicht mehr synchron. Dann erfolgt die asynchron Meldung. Das Problem ist dann, dass der Client z.B. einen Towerbau eines Mitspielers oder das Empfangen eines Creeps, egal ob es ihn betrifft oder einen Mitspieler, "zu spät" erhält, egal ob das nun 1 Millisekunde oder 10 Sekunden sind. Durch das Voting am Ende, das nach Mehrheitsbeschluss (50%+1 Regel) funktioniert, wird der interne Spielstand dadurch aber nicht gefährdet. Der Client muss nur dafür sorgen, dass ein Creep, das theoretisch ein paar Millisekunden später kam (mehr sind das normalerweise nicht), trotzdem im Spielstand der anderen Spieler gedefft wird (wo das Creep eventell schon ein paar Millimeter weiter ist). Das erreicht man in der Regel durch ein klein wenig mehr Defensive - für den Fall der Fälle.
Das heißt auch, dass es nur zu Asyncs kommt, wenn die Verbindung vom Client zum Server so langsam ist, dass mal mehr als 2,5 Sekunden vergehen können um ein Paket vom Server zu empfangen. Das entspricht einem Ping von 2500.
Think it, design it, build it, run it. That's what I do.