2010-05-17 19 views
15

Lassen Sie uns vorstellen, wirklich einfaches Spiel ... Wir haben eine Labirinth und zwei Spieler versuchen, Ausgang in Echtzeit über das Internet zu finden.Wie können Online-Spiele-Kunden so schnell Daten über das Internet austauschen?

Bei jedem Spiel sollte der Spielclient die Koordinaten des Spielers an den Server senden und die aktuellen Koordinaten eines anderen Clients akzeptieren. Wie ist es möglich, diesen Austausch so schnell zu machen (wie alle modernen Spiele)?

Ok, wir können Memcache oder eine ähnliche Technologie verwenden, um Data Mining-Vorgänge auf der Serverseite zu reduzieren. Wir können auch den schnellsten Webserver usw. verwenden, aber wir werden immer noch Probleme mit dem Timing haben.

Also, die Fragen sind ...

  1. Welche Kunden Protokoll Spiel werden in der Regel für die Verwendung von Informationen mit dem Server austauschen?
  2. Welche Servertechnologien kommen zur Lösung dieses Problems?
  3. Welche Algorithmen werden für die Bekämpfung mit Verzögerungen während des Spiels usw. angewandt
+2

Verdammt, ich habe irgendwo über John Carmacks Netzwerktechniken auf DOOM und Quake gelesen und kann den Link nicht finden. Verdammt! –

Antwort

5
  • Verwendung UDP, nicht TCP
  • ein eigenes Protokoll verwenden, in der Regel ein einziges Byte einen „Befehl“ und so wenig nachfolgende definieren wie möglich Bytes, die die Befehlsargumente enthält
  • Vorhersage verwendet wird, um die anderen Spieler Bewegungen glatt erscheinen zu lassen, ohne dass ein Update für jeden einzelnen Rahmen zu erhalten, die

Hinweis: Die Vorhersage wird sowieso verwendet, um das schnelle Bildschirmupdate (~ 60 fps) zu glätten, da die tatsächliche Spielgeschwindigkeit normalerweise langsamer ist (~ 25 fps).

+0

Es ist nicht so einfach wie UDP über TCP zu verwenden. TCP bietet Ihnen viele nützliche Funktionen, die Sie selbst erstellen müssen, wenn Sie UDP verwenden. TCP hat nur Probleme, wenn Sie einen Paketverlust haben, der heutzutage ziemlich ungewöhnlich ist. Viele große MMOs verwenden TCP. UDP wird nur benötigt, wenn Ihr Spiel fehlschlägt, wenn es gelegentlich zu langen Verzögerungen zwischen den Paketen kommt (wegen erneutem Senden verlorener Pakete). Denken Sie lange und gründlich darüber nach, bevor Sie sich für UDP entscheiden. –

+1

Robert: UDP wird unter vielen, vielen Online-FPS-Spielen verwendet - es ist einfach das schnellste verfügbare Netzwerkprotokoll, weil Sie nicht darauf warten wollen, dass TCP Pakete erneut sendet und auf Warteschlangenintegrität prüft. Ich denke, die Antwort ist gültig, wenn das fragliche Spiel keine vollständige Integritätsprüfung benötigt und die schnellsten Antwortzeiten benötigt. – scape

3

Die anderen Antworten sind nicht ein paar wichtige Missverständnisse in der ursprünglichen Nachricht buchstabiert, das ist, dass diese Spiele sind nicht Websites und funktionieren ganz anders. Insbesondere:

  • Es gibt keine oder wenig "Data-Mining", die beschleunigt werden muss. Die schnellsten Online Spiele (zB Ego-Shooter) speichern normalerweise nichts zu Disk während eines Spiels. Langsamer online Spiele, wie MMOs, können eine Datenbank verwenden, in erster Linie zum Speichern Spielerinformationen, aber für die meisten Teil halten sie ihre Player und Weltdaten im Speicher, nicht auf der Festplatte.
  • Sie verwenden Webserver nicht. HTTP ist ein relativ langsames Protokoll, und sogar TCP allein kann zu langsam für einige Spiele sein. Stattdessen haben sie maßgeschneiderte Server, die nur für dieses bestimmte Spiel geschrieben werden. Oft sind diese Server eher auf eine niedrige Latenz als auf einen hohen Durchsatz eingestellt, da sie normalerweise keine großen Dokumente wie ein Webserver bereitstellen, sondern viele kleine Nachrichten (z. B. in Bytes anstatt in Kilobyte gemessen).

Mit diesen zwei Fragen abgedeckt, geht Ihr Geschwindigkeitsproblem weitgehend weg. Sie können eine Nachricht an einen Server senden und erhalten eine Antwort in weniger als 100ms und können dies mehrmals pro Sekunde tun.