Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP] Status użytkownika (online, offline)
Forum PHP.pl > Forum > Przedszkole
Gość
Witam. Robię coś w rodzaju poczekalni, gdzie będzie wyświetlana lista użytkowników przeglądających daną stronę. Problem rodzi się w punkcie 4, wyjaśnię po przedstawieniu działania mojego systemu.

1. użytkownik wchodzi na stronę, jest dodawany do listy
2. jest ustawiony interval w javascript, który aktualizuje czas, kiedy ostatnio był widziany użytkownik
3. podczas tego intervala przy okazji kasowane są rekordy, gdzie czas nie został zaktualizowany od x sekund
4. w odpowiedzi serwer podaje, jakich użytkowników należy dodać i usunąć z listy w przeglądarce

co do punktu 4, serwer miałby zwrócić użytkowników, których rekordy zostały usunięte poleceniem DELETE. tu rodzi się problem, bo niektórzy użytkownicy zostaną usunięci w jednym zapytaniu, inni - w drugim, od innego użytkownika. tak samo z dodawaniem userów - temu, komu jako pierwszemu wykona się interval, dodadzą mu się użytkownicy, którzy weszli do poczekalni.
więc tu rodzi się myśl, aby po prostu od nowa listować użytkowników za każdym wywołaniem intervala. ale to już wydaje się nieoptymalne

da się to zrobić jakoś inaczej, by użytkownicy na bieżąco byli aktualizowani, a mniejszym kosztem transferu?
Przy okazji, czy ten system jest ogólnie w miarę optymalny? Może istnieją lepsze sposoby?
b4rt3kk
A na jakiej podstawie stwierdzasz, że dany użytkownik "nie był widziany od x sekund"? Rzeczywiście jest Ci do tego potrzebny JS? Użytkownik może przechodzić do różnych podstron, itd.? I to wszystko odbywa się za przeładowaniem strony?
Gość
Tak, potrzebny mi do tego JS, bo poczekalnia ma się aktualizować bez przeładowania strony..
Mam interval, który wysyła do serwera informację, że dany użytkownik jest zalogowany. Wtedy zapisałbym w bazie kolumna lastseen = time()
przy okazji wykonywane jest zapytanie delete where lastseen < time()-x (czyli nie odpowiada od x sekund)


po opuszczeniu podstrony ma wywalać użytkownika z poczekalni
b4rt3kk
Więc zapewne masz w bazie zapisanych użytkowników, którzy obecnie przebywają w poczekalni, tak? Zamiast zwracać to co zostało usunięte poprzez delete, czyścisz całą listę poczekalni i pobierasz Ajaxem z bazy aktualną listę (oczywiście jako dodatkowy warunek możesz sprawdzać czas - jakby nie zdążyło usunąć rekordu z bazy przed sprawdzeniem).
Gość
okej dzięki aarock.gif
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.