Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Chat - Odswiezanie widoku
Forum PHP.pl > Forum > Przedszkole
wertyg
Probuje napisac chat ala shoutbox i zadaje sobie pytanie czy to wykonalne bez uzycia javy ?

Moj problem polega na tym ze zalogowani uzytkownicy zobacza tekst napisany przez innych uzytkownikow dopiero wtedy gdy sami cos napisza (ewentualnie wykonaja jakas inna akcje).

Ogolnie dziala on tak:
-Akcja:uzytkownik wpisuje komentarz do pola fromularza wciska send
-Przechwytuje send
-Zapisuje komentarz do bazy mysql
-Czytam z bazy mysql komenatrze
-Wyswietlam je
-Oczekuje na akcje

Czyli nie jestem w stanie wyswietlac ich na biezaco, gdy uzytkownikow pojawi sie wiecej (Uzytkownik1 poki nie wcisnie send nie zobaczy tego co napisal Uzytkownik2).

Widok musialby pobierac dane z bazy samodzielnie bez oczekiwania na akcje uzytkownika i nie mam pomyslu jak to zrobic.
redeemer
Jest to wykonalne bez użycia javy , jednak javascript jest tutaj wskazany. Mógłbyś jeszcze jakoś pokombinować z meta refresh (nawet w osobnym iframe), ale najlepiej będzie to zaciągnąć ajaxowo, czyli z użyciem javascript. Również przy użyciu tej techniki zrealizowałbym wysyłanie wiadomości, żeby nie przeładowywać całej strony, jak prawdopodobnie masz w tej chwili.
ixox
Kiedyś robiłem podobną rzecz, tzn Chat. Zrobiłem to w ajaxie(js) i php gdzie sprawdzałem co sekunde czy nie ma nowej wiadomości. Więc jedynie coś w tym stylu.
Crozin
Google: Bidirectional AJAX, HTTP long polling
wertyg
Probowalem troche z tym odswiezaniem co sekunde ale za bardzo mnie denerwuje takie mryganie, trzeba bedzie jednak tego ajaxa sprobowac kiedys bo na razie to pojecia o javie nie mam.
W kazdym razie dzieki za pomoc i pokierowanie na wlasciwe tory
redeemer
javascript to nie java!
markonix
Pierwszy czat, który miał dość sporo zalet zbudowałem w oparciu o jQuery load.
http://api.jquery.com/load/

Odświeżanie co np. 3-4 sekundy w zupełności starczy, implementacja szalenie prosta sprowadza się do 3 linijek jQuery i oczywiście zapytania i widoku wpisów.
Potem napisałem oparty o pobieranie ostatnich wiadomości ale szczerze to tamten mimo większego obciążenie (pobiera wszystkie wpisy zamiast nowych) to naprawdę dużo ułatwiał np. moderacje (moderacja widziana automatycznie), czyszczenie rozmowy (teraz wiadomości dodaje na początek, ale nie dopisałem usuwania).

Jeżeli nie przewidujesz wielkiego portalu to obciążenie takiego czatu wg mnie jest znikome jeżeli wszystko jest napisane jak trzeba.
Troszkę inaczej jakby czat/shoutbox był widoczny dla każdego odwiedzającego wink.gif

sebekzosw
ciekawi mnie Bidirectional AJAX, HTTP long polling. Macie polskie artykuły na ten temat, bo nic nie znalazłem w Google smile.gif
wertyg
Udalo mi sie jakims cudem zrobic to w Ajaxie (w ogole nie znam javascript) ustawilem odswiezanie co sekunde i zastanawiam sie przy ilu uzytkownikach zarznie mi czat, bo co sekunda czytam 15 ostatnich wpisow z bazy (na jednego usera:D)

Moze lepiej byloby to zrobic przez jakis cache? Byloby szybciej ?

Jesli chodzi o Ajaxa to zauwazylem jedna rzecz przypadkowo, gdy uruchomilem starego xp i tam poinstalowane mialem jakies zdeaktualizowane przegladarki + jave, dzialy sie wowczas rozne cuda:
- w przypadku opery: po odswiezaniu ajaxowym widok nie pokazywal sie wcale
- w przypadku firefoxa bardzo widoczne bylo odswiezanie (mruganie)

Natomiast pod Win7 z zaktualizowana Java,Firefoxem, Opera, odswiezanie chodzi ladnie we wszystkich przegladarkach.
Za wyjatkiem IE8 ktory przy kazdym odswiezaniu pokazuje zdeaktualizowany widok z pierwszego uruchomienia skryptu. (?)
sebekzosw
Jest to bardzo proste do obejścia. Robisz plik PHP z pętlą która się wykona 120 razy i po każdym "obrocie" wstrzymujesz skrypt sleep(1). W pętli pobierasz po prostu rekordy odpowiednie, zapisujesz do pliku txt i gotowe. Ustawiasz w cronie wykonywanie co 2 min smile.gif chyba, że masz możliwość wykonywania crona co sekundę to wtedy nie musisz używać pętli i funkcji sleep

a teraz w jQuery pobierasz ten plik txt za pomocą i tyle smile.gif
abort
Cytat(sebekzosw @ 18.10.2012, 16:50:30 ) *
chyba, że masz możliwość wykonywania crona co sekundę to wtedy nie musisz używać pętli i funkcji sleep

Nie ma takiej możliwości. Taka możliwość nie istnieje. Technicznie nie istnieje. Dla nikogo. Na żadnym uniksie. End of story.
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.