Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] [javascript] synchronizacja czasu
Forum PHP.pl > Forum > PHP
Cezar708
Witam

Mam pytanie, czy istnieje jakiś system synchronizacji czasu pomiędzy skryptem JavaScript a PHP?

Chodzi mi o taką sytuację, na przykład:

Załóżmy, że skrypt PHP "wie" o tym, że dany proces zakończy się za X sekund, podczas generowania strony statycznej przekazuje zmienną zawierającą pozostały czas (X sekund) do skryptu JavaScript, po to aby JavaScrpt mógł już samodzielnie odliczać czas w dół.

Jest jednak mały problem, nie jestem w stanie przewidzieć ile czasu będzie się strona przesyłała do przeglądarki, a jak wiemy jest to uzależnione od wielu czynników (odległości, ruchu w sieci, szybkości łącza). A co za tym idzie czas od momentu odliczania w JavaScript będzie nie X tylko X-m, gdzie m to czas przesyłu danych....

więc czy jest jakiś sposób na to aby w miarę skutecznie synchronizować czasy pomiędzy skryptami PHP a JavaScript?
Może jakieś wykorzystanie AJAXa?

Osobiście usatysfakcjonowałaby mnie rozbieżność pomiędzy czasami na serwerze a u klienta nie przekraczająca 1 sekundy.

Pozdrawiam
Cezar

PS: Nie wiedziałem w zasadzie w jakim dziale umieścić ten wątek, ponieważ jest on z pogranicza JavaScript i PHP. Umieściłem tutaj, ewentualnie proszę o przeniesienie.
qqrq
Hm, a nie możesz z PHP-a wysłać do przeglądarki aktualnego (dla PHP) znacznika czasu? Wtedy JS będzie wiedziało "gdzie jest" i będzie odliczało od odpowiedniego miejsca. Jeśli źle cię zrozumiałem, to sorry, ale trochę to zamotane. winksmiley.jpg
Cezar708
Cytat(qqrq @ 26.03.2008, 10:57:23 ) *
Hm, a nie możesz z PHP-a wysłać do przeglądarki aktualnego (dla PHP) znacznika czasu? Wtedy JS będzie wiedziało "gdzie jest" i będzie odliczało od odpowiedniego miejsca. Jeśli źle cię zrozumiałem, to sorry, ale trochę to zamotane. winksmiley.jpg


zauważ, że w cytowanym tekście pogrubiłem mały tekst. Przesłanie z PHP do JavaScript nie stanowi problemu, gorzej z dokładnym określeniem czasu ile komunikat będzie przesyłany... bo niestety trzeba to dokładnie oszacować
qqrq
Cytat(Cezar708 @ 26.03.2008, 11:01:19 ) *
gorzej z dokładnym określeniem czasu ile komunikat będzie przesyłany...


Właśnie po to wysyłamy znacznik czasu - PHP wysyła swój znacznik, JS go odbiera, porównuje ze swoim (aktualnym) i mamy różnicę czasu pomiędzy rozpoczęciem wykonywania skryptu (timestamp wygenerowany przez PHP) a jego "odebraniem" przez JS. Np.:

  1. var now = new Date();
  2.  var diff = now.getTime() - <?php echo time(); ?>000;


i w ten sposób masz różnicę (w milisekundach - mniej więcej winksmiley.jpg ) między "czasem PHP" a "czasem JS".
Kocurro
Przy założeniu, że czas na komputerze jest zgodny z czasem GMT ...
grzesiek_g
Moim zdaniem jest to niemożliwe do oszacowania z poniższych powodów:
1. Przykład - w czasie otwierania naszej strony użytkownik skończył pobieranie pliku, w związku z czym transfer podskoczy mu znacząco (i sytuacja odwrotna).
2. Różnice w chwilowym obciążeniu łączy pomiędzy serwerem a klientem.
3. Chwilowe obciążenie procesora w komputerze klienta.
Kocurro
Jedyne rozwiązanie to zabawa z ajaxem i wysyłanie X zapytań jedno po drugim, następnie wyznaczenie na podstawie czasów zapytań i odpowiedzi szacowanego czasu przepływu informacji ...
Cezar708
Cytat(qqrq @ 26.03.2008, 11:12:13 ) *
i w ten sposób masz różnicę (w milisekundach - mniej więcej winksmiley.jpg ) między "czasem PHP" a "czasem JS".


no właśnie, trzeba się zgodzić z Kocurro, który powidział:

Cytat(Kocurro @ 26.03.2008, 11:15:32 ) *
Przy założeniu, że czas na komputerze jest zgodny z czasem GMT ...


czas nawet może być GMT, ale na przykład niedokładnie na komputerze klienta ustawiony, na przykład o kilka sekund


Cytat(Kocurro @ 26.03.2008, 11:43:03 ) *
Jedyne rozwiązanie to zabawa z ajaxem i wysyłanie X zapytań jedno po drugim, następnie wyznaczenie na podstawie czasów zapytań i odpowiedzi szacowanego czasu przepływu informacji ...


właśnie uważam, że takie rozwiązanie chyba będzie jedynie dobre... po prostu wysyłać co kilka sekund AJAXem, zapytanie do serwera o czas i na tej podstawie obliczać czas odpowiedzi... tylko nie wiem jak rozpocząć liczenie czasu.. myślicie, że nie będzie błędu warunków początkowych? Czyli jak przesłać pierwszy znacznik czasu?

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.