Synchronizacja czasu serwera z czasem przegladarki?

Witam, czy możliwa jest synchronizacja czasu serwera z przeglądarką. Wykonuję co minutę za pomocą gemu clockwork pewną czynność w określonej sekundzie. Jednocześnie potrzebowałbym wykonywać inne czynności w odpowiedniej sekundzie po stronie przeglądarki. Czy możliwa jest taka synchronizacja i jeżeli tak to jak to najlepiej zrobić?

yyyyyyy

nie? ;] chcesz userowi w systemie czas ustawiac? cos tam nocno zle to zaprojektowales, napisz jaki jest prawdziwy problem

Może potrzebujesz websocketów? Wykonujesz coś na serwerze, po czym pushujesz notyfikację do przeglądarki.

Jeśli liczysz że uda Ci się zrobić taki system że backend i frontend będą ze sobą idealnie współgrały w czasie to myślę że powinieneś przemyśleć dizajn. W każdym razie życzę powodzenia :smiley: Jakby Ci się coś takiego udało to się podziel, wysłucham z ogromną ciekawością.

Mam funkcjonalność gry losowej. Co minutę obywa się losowanie. Użytkownik wchodząc na stronę widzi licznik z czasem - w określonej części minuty może obstawiać. Zakłady muszą być obstawiane w określonym czasie przed losowaniem, po drodze jeszcze wywoływane są określone komunikaty i animacje, dlatego chciałbym jakoś odnosić się do czasu serwera. W tej chwili pobieram czas w momencie wczytywania strony i co minute aktualizuję ale nie jest to idealne rozwiązanie.

Poczytaj o web socketach, w nowych rails o actioncable

I think you should just ignore browser time. In JS when you create new Date object you can pass date params from server. Thus browser time won’t be important for you

Twój problem to de facto globalna synchronizacja czasu. Niestety jest to jeden z trudniejszych problemów w naszej branży i nic tu niestety nie pomogą websockety. Żeby dać Ci ogląd tego, jak można to ugryźć z teoretycznego punktu widzenia proponuję Ci przejrzenie tych dwóch prac:

Ta druga praca mocno odwołuje się do wcześniejszej koncepcji Lesliego Lamporta o zegarach logicznych, więc można byłoby od tego zacząć.

W dużym skrócie w swojej logice musisz przyjąć, że czas nie jest punktem, a odcinkiem pomiędzy punktem x (na pewno globalny czas jest późniejszy od x) a punktem x’ (na pewno globalny czas jest wcześniejszy od x’). Możesz swojego serwera jak najbardziej użyć jako bazowego źródła prawdy - frontend pytałby na samym początku Twój serwer o aktualny czas i musiałby wziąć pod uwagę czas potrzebny na odpowiedź. Twój serwer z kolei musiałby dać klientom pewien zakres tolerancji - chyba że możesz żyć z powtórnymi synchronizacjami i informacjami do użytkownika typu ‘ups, trochę się spóźniłeś’.

Jeszcze tak sobie myślę, czy dałoby się ten problem rozwiązać poprzez implementację jakiegoś protokołu konsensusu (np. Raft) przy użyciu WebRTC. Ogólnie rzecz biorąc jednak uwaga @mentero jest z zasady słuszna. Sprawa do ogarnięcia, ale nakład pracy spory.