Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

19.02.2014, 00:28

Dem Client ein genaues Zeitfenster einräumen?

Hallo zusammen!

Folgende Situation:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  Client A                Server B
  ================================
  
1.  A     HTTP REQUEST =>    B speicher timestamp
             (~100ms)
  
2.  A  <=    Antwort         B
             (~600ms)



3.  A soll nun ein Zeitrahmen von 5 Sekunden haben, seitdem A die Antwort von B in 2. erhalten hat

4.  A     HTTP REQUEST =>    B vergleicht jetzigen timestamp mit timestamp aus 1., darf nicht großer als X. Problem: 2. und 4. nehmen voraus- und unberechenbare Zeit in Anspruch
             (~100ms)


Vielleicht ein wenig kompliziert dargestellt, aber im Grunde möchte ich, dass Javascript-Client A eine genau Zeitspanne (Genauigkeit im 1/10 Sekunden-Bereich) hat, um dem PHP-Server B eine Antwort zu senden.

Es soll letztendlich für ein Quiz sein, bei welchem der Spieler eine Frage bekommt, aber der Server gleichzeitig speichern soll, wann der Spieler die Frage erhalten hat, um dann zu prüfen, ob dieser schnell genug geantwortet hat.
Clientseitige Lösungen kommen hierbei nicht in Frage, aber Geld für großartige und komplexe Websocket-Server will ich auch nicht ausgeben. :(

Problematisch ist auch, dass die Ausführzeiten je nach Auslastung sehr variieren und natürlich die HTTP-Anfragen naturgemäß ebenfalls.

Das ist wahrscheinlich unmöglich, aber ich dachte mir, dass ich trotzdem mal fragen kann. :)

Edit:
Durchs googlen bin ich mittlerweile auf den Begriff "round trip time" gestoßen, kann mir das helfen?
Es sollte natürlich absolut nichts sein, dass irgendwie vom Client ausgeht und in dem Sinne dann "hackbar" ist.
Auch möchte ich es vermeiden, durch Pings so eine Art Durchschnitts-Latenz zu bestimmen. Aber ich fürchte bereits, das es da wohl keine Möglichkeit sonst gibt.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »xTharuinx« (19.02.2014, 01:10)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

19.02.2014, 06:31

Gegenfrage: Was glaubst Du wie viele Spieler das Spiel mal spielen werden und wie hoch ist die Chance, dass sich da jemand die Mühe macht es zu hacken und wie schwer wären die Folgen tatsächlich, wenn es einer tut?

Aus meiner Sicht ist Deine einzige realistische Chance die Zeitmessung auf dem Server. Wer laggt, verliert. Das war schon immer so.

Rein theoretisch könnte man das Ack zu Response 2. auswerten und dieses als Startzeitpunkt nutzen. Ist jedenfalls genauer/freundlicher als den Absendezeitpunkt der Response zu verwenden. An das Ack wirst Du vermutlich aber nicht ran kommen. Alles andere enthielte Lösungen mit Client-Code, der manipulierbar wäre.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

19.02.2014, 08:14

Hast du dir schon mal Frameworks wie socket.io und/oder node.js angesehen?
Glaube, Quizseiten wie Triviado & Co nutzen sowas auch.
fka tm

4

19.02.2014, 14:33

@BlueCobold:
Natürlich bedeutet das ganze einen Aufwand, der sich wohl möglich gar nicht lohnt. Allerdings möchte ich gerne neue Dinge ausprobieren, auch ohne dass sie einen praktisch sinnvollen und ökonomische effizienten Sinn haben. Wie sonst soll ich mir neues Wissen aneignen?
Das mit dem low-level TCP habe ich mir auch schon überlegt, aber das ist über PHP leider unmöglich.

@TrikkieMikie:
Ja, die kenne ich bereits. Aber dafür bräuchte es ja wieder einen leicht komplexeren Server.

Ich merke schon, dass es da wohl sonst keine Möglichkeiten gibt.

Werbeanzeige