Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Realtime - ! (setInterval etc.)
Forum PHP.pl > Forum > XML, AJAX
matrik
Witam

W jaki sposób można zastąpić XMPP?
Chodzi mi o klienta JS, który mógłby sprawdzać w czasie rzeczywistym czy dany status się zmienił,
np.
- Użytkownik A wysłał wiadomość do użytkownika B
- Użytkownik B otrzymał powiadomienie na stronie, że jest nowa wiadomość (powiadomienie nie zostało wyświetlone z akcji przeładowania strony)

Takie coś zauważyłem przypadkowo na Facebooku, m.i. Gdy wysłałem wiadomość z jednego konta na drugie (nie poprzez czat), to wykonanie akcji pobrania statusu nowej wiadomości było natychmiastowe.
Czy to zastosowanie po prostu klienta jabbera JS + biblioteki jabbera PHP??

Uwagi:
- podobne do funkcji setInterval
- JS nie pobiera okresowo co x sekund, tylko jeśli status 'czegoś tam' jest pozytywny

Myślę, że zastąpieniem XMPP może być utworzenie aplikacji w zwykłym kodzie PHP i sprawdzaniu statusu danej części strony przez setInterval z okresem 3-5s, jednak nie do tego dążę.

*Chcę ograniczyć wydatki na serwer dedykowany dla postawienia jabbera
Crozin
WebSockets? Lub emulowanie tego jeżeli zależy Ci na wsparciu IE.
wookieb
http://www.ape-project.org/
Ewentualnie może być NODE.js ale to już wyższa szkoła jazdy.
W skrócie PUSH ajax polega na tym aby żądanie czekało na odpowiedź serwera. I tak też skrypt nie odpowie dopóki nic nie będzie do zwrócenia dla żądania.
matrik
IE odpada
a interesuje mnie ape-project, do tego chyba trzeba mieć serwer dedykowany?
Crozin
Teraz dopiero zauważyłem, że WebSockets ( http://caniuse.com/#feat=websockets ) będzie można używać dopiero za kilka miesięcy gdy FF4/O11 zostaną wydane (WebKit już to wspiera).

Cytat
a interesuje mnie ape-project, do tego chyba trzeba mieć serwer dedykowany?

Cytat
APE Server is an Comet server implementing the POST and GET methods of the HTTP protocol. It does not replace a regular Web Server (such as Apache, Lighttpd or Nginx), however, the APE Server is only used for AJAX Push.
Wygląda na to, że tak.
matrik
nie mam pomysłu jak by to miało działać
mam wiedzę jako taką co do js, ale nie taką, żeby strona była jednym wielkim elementem dynamicznym - chodzi mi tu o Facebooka haha.gif
za to co do PHP trzeba dobrze pomyśleć jaka baza mogła by obsłużyć tyle zapytań w danym czasie - cache to raczej odpada bo zwracało by tylko cyfry, żadnych stringów + JSON dla zapytań ajaxowych
wookieb
Nie jest wymagany dedyk do takich rzeczy. Dla APE-project może tak, ale zrobisz to najzwyklejszym ajaxem.
matrik
Do takich rzeczy... XMPP na VPS czy RPS w OVH?
----
Ale chodzi mi konkretnie tylko i wyłącznie o optymalizacje
Jak niby Facebook może obsługiwać tyle zapytań? Przecież niepotrzebne zapytania do SQL są zabójcze, omijając fakt, że serwis jest na klastrowej strukturze serwerów dedykowanych.
Mam pytanie:
Jaki i w czym napisać kod, tak aby jak najmniej wykonywać zapytań dotyczący tego problemu, nie chodzi o cache?
jQuery->load odpada - nie ma o czym nawet mówić
ajax też, ale służyć może do pobierania przecież
a co do PUSH ajax, coś więcej na ten temat od was?
Mephistofeles
W tym wypadku to nie przeglądarka wywołuje żądania, a otwiera jedno dłuugie, i serwer odpowiada w momencie np. wysłania wiadomości, więc nie ma tu niepotrzebnych zapytań itp.
matrik
Cytat(Mephistofeles @ 18.11.2010, 20:02:31 ) *
W tym wypadku to nie przeglądarka wywołuje żądania, a otwiera jedno dłuugie, i serwer odpowiada w momencie np. wysłania wiadomości, więc nie ma tu niepotrzebnych zapytań itp.

Tzn. tak samo by wyglądało z pobieraniem informacji?
Jak taki kod miałby wyglądać?
Mephistofeles
Nie wiem biggrin.gif. Poczytaj o Comet / Reverse AJAX.
zegarek84
Cytat(Mephistofeles @ 18.11.2010, 20:02:31 ) *
W tym wypadku to nie przeglądarka wywołuje żądania, a otwiera jedno dłuugie, i serwer odpowiada w momencie np. wysłania wiadomości, więc nie ma tu niepotrzebnych zapytań itp.

aby otworzyć żądanie musi otworzyć to żądanie - brzmi może nie logicznie ale...
kiedyś tam skomentowałem jednego bloga -
wspomniane jest tam o tym co jest zacytowane:
Komunikacja z serwerem w czasie rzeczywistym

nie jestem programistą więc skoro nie miałem potrzeby nie stosowałęm tej metody później - ale na 99% zadziała
matrik
Szukam zaskakująco prostego rozwiązania, a im coraz bardziej szukam tym staje się bardziej skomplikowane haha.gif
Do takiej komunikacji jest jednak potrzebny serwer dedykowany, i jednak zastosowanie XMPP/Jabber + klient JS na stronie tego będzie szerokie, bez wykorzystywania dodatkowych technologii programowania.
Nie każdy użytkownik ma zainstalowane platformy JAVA, która nie cieszy mnie zastosowaniem do tego projektu w podtrzymywaniu połączenia.
Wykorzystanie w PHP sleep i foreach też nie jest zbyt optymalnym rozwiązaniem, jeśli użytkowników na stronie będzie więcej niż 500 online to nawet taki prosty kodzik będzie bezsensowny, jeśli ma szperać w bazie, która ma setki tysiące rekordów. Jednak co do bazy to nie ten temat.

Więc APE-Project jako klient komunikatora na stronie to jest już coś.

Co do zapytań, to oczekiwanie na odpowiedź poprzez otwarcie "okna" połączenia. Zapytania można popatrzeć w Developer Tools - Chrome.
Całe połączenie lub oczekiwanie na wynik jeśli się nie mylę powinien
1. Wysłać zapytanie do skryptu PHP (max. 5ms)
2. Oczekiwanie max 60sec na pozytywny wynik zwrócony przez skrypt PHP (w tym punkcie nie mam pojęcia jak ma to się odbywać)
- wznowienie zapytania jeśli po upływie 60sec. nie zostanie zwrócony pozytywny wynik
3. Otrzymanie wyniku (max. 10ms) - przekazanie do klienta

Chyba znalazłem coś co by zastąpiło XMPP tongue.gif
A mianowicie wykorzystywane jest to w Plupload.com - plugin do wysyłania plików poprzez AJAX.
Można to wykorzystać do komunikacji pomiędzy userami?
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.