niklaskamenisch: online game - verständisfrage

Beitrag lesen

hi,

Hallo,
ich habe eine Verständnisfrage bezüglich der Technik von sogenannten OnlineGames, genauer Multiplayer-Shooter wie z.b. Battlefield. wie läuft das da mit der Datenübertragung...
Konkrete Fragen:

0)  werden z.b. meine Koordinaten permanent in eine zentrale DB übertragen (zb. via UDP) und die anderen Nutzen rufen stetig diese Daten ab?

Das Abspeichern macht nur sinn, wenn man die Daten mehrfach aufrufen möchte und das nach langer Zeit noch. In dem Fall hier, wäre das nicht der Fall. Da reicht es aus, die Infos in den Arbeitsspeicher zu schreiben. Deswegen laufen ja die Server dauerhaft. Diese halten alle Informationen bereit. Stürzen sie ab, sind die infos weg, aber dann braucht sie ja auch keiner mehr!

  1. bleibt die Verbindung offen, oder muss ich mich immer wieder neu verbinden?
    (a la http)

  2. welches Netzwerkprotokoll wird dafür genutzt? TCP/IP, UDP...?

  3. in welchen Intervallen werden die Daten gesendet? Diese müssen ja extrem klein sein.

Das wurde von suit glaub ich grade schon erklärt. Wichtig ist zu wissen, dass nicht alle Pakete notwendig sein dürfen und keine Überprüfung des Senders notwendig ist. Man sendet alle Infos so schnell es eben geht an den den Server und bekommt Infos. Daten die nicht immer ankommen müssen. Werden nicht überprüft (rückmeldung das erhalten). Bei anderen Daten wie "du hast verlohren" muss es natürlich ankommen. Daher ist das etwas gemischt in der Übertragung. Umso weniger Pakete aber ankommen, umso schwerer wird es das ganze fair zu gestalten. Wenn nur jede sekunde 2 pakete durch kommen würde, kann man nie genau sagen, wo die person grade sein müsste.

  1. würde man sowas (ähnliches, nur sehr viel simpler) mit Ajax umsetzen: wäre das technisch möglich, oder wären die Intervalle so klein, dass es Probleme geben könnte?

In meinen Augen wäre das deutlich zu langsam. AJAX läuft über HTTP, dieses Protokoll ist zu langsam und vorallem schließt es nach Anfrage - Antwort sofort wieder ab. Dauerhafte Verbindungen sind damit nicht sinnvoll möglich.

  1. ich würde sowas gerne mal mit java-applets ausprobieren. Wie wäre am besten der Versuchsaufbau? (z.b. zentrales Python-Skript, welches die Daten entgegennimmt und in eine DB spielt bzw. ausgibt, Applet n, welches diesem Skript die Daten übergibt bzw. entgegennimmt.)

Java ist hier der richtige Ansatz.
Mit etwas übung, kann man sich einen eigenen Server in Java schreiben, der die ganze Komunikation übernimmt und schlank genug ist für das ganze. Java kann zudem dauerhaft laufen und die einzelnen Spieler gut verbinden.

Gruß Niklas

P.S.: ein Tetris-Battle könnte ich mir grade noch so mit Ajax vorstellen ;)

--
Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.