Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [solved][PHP][JS] Wysyłanie danych przez serwer do usera
Forum PHP.pl > Forum > XML, AJAX > AJAX
leovandamon
Witam!

Ostatnio dręczy mnie (nie daje spać po nocach! tongue.gif ) pewien problem. Zastanawiam się jak (i czy w ogóle się da) zrobić coś takiego, żeby skrypt JS w przeglądarce czekał (bez otwierania połączeń - nie interesuje mnie metoda "pingowania") na dane z serwera.

Ogólnie chodzi o to, że jak na serwerze "stanie się coś", np. user dostanie wiadomość, to właśnie serwer wysłał w pewien magiczny sposób ów informację do skryptu w otwartym oknie przeglądarki, który to już zajmie się dalszą interpretacją. I właśnie interesuje mnie ten "magiczny sposób".

W przykładzie:
1. User1 i user2 logują się.
2. User2 wysyła do usera1 wiadomość i w tym momencie następuje wysłanie o tym informacji do usera1.
3. Skrypt u usera1 interpretuje informację i pobiera z serwera wiadomość.

Jednocześnie skrypt u usera1 nie wysyła co x sekund prośby do serwera o wyświetlenie wiadomości.

Czy coś takiego jest w ogóle możliwe za pomocą PHP i JS (AJAX)? Czy jednak do tego niezbędne jest już pisanie osobnych programów?

Pozdrawiam,
Leo van Damon.

P.S.: Jeśli zły dział/mało info, proszę się na mnie nie rzucać, tylko po prostu powiedzieć, o co konkretnie chodzi. Napiszę więcej.
wookieb
Używają technologii ajax serwer nie może wysłać informacji sam z siebie do klienta (taka jest specyfika protokołu http). Żeby to umożliwić potrzebne są inne technologie (np flash media server, aplety javy nawiązujące stałe połacze) oraz inne które nawiązują stałe połączenia z klientem.
Korzystają z ajaxa, flasha odpytujesz co jakiś czas serwer czy coś nowego nie przyszło do Ciebie, czyli w skrócie czy serwer posiada informacje "do odbioru" dla odpytującego klienta.
leovandamon
W takim razie mówi się trudno.

Dzięki serdeczne za szybką odpowiedź.

Pozdrawiam,
Leo van Damon.
zegarek84
Cytat(wookieb @ 31.01.2010, 22:06:35 ) *
Używają technologii ajax serwer nie może wysłać informacji sam z siebie do klienta (taka jest specyfika protokołu http)

ale nie musi też dostawać odpowiedzi od razu winksmiley.jpg ...
Cytat(wookieb @ 31.01.2010, 22:06:35 ) *
Korzystają z ajaxa, flasha odpytujesz co jakiś czas serwer czy coś nowego nie przyszło do Ciebie, czyli w skrócie czy serwer posiada informacje "do odbioru" dla odpytującego klienta.

...więc nie musi odpytywać tego serwera regularnie...

Cytat(leovandamon @ 31.01.2010, 21:57:30 ) *
Czy coś takiego jest w ogóle możliwe za pomocą PHP i JS (AJAX)?

z tego co się orientuję jednak jakoś tego nie testowałem to można, a jak to pomału już śpieszę z odpowiedzią.

jako, że tutaj może się przydać rozwiązanie ala cron'a w php lub ogólnie żeby serwer sam u siebie w pętli sprawdzał czy ma coś wysłać to proponuję także zapoznać się z tematem który deczko się rozwinął na oftopick:
uruchamianie pliku php co 30s bez właczonego kompa - na serwie

i dalej co do tego co napisałem, że nie koniecznie trzeba odpowiedź wysłać odrazu to luknij na przykład i go uruchom:
  1. function flush_buffers(){
  2. @flush();
  3. }
  4.  
  5. for($i=0;$i<30;$i++)
  6. {
  7. echo 'printing...<br />';
  8. flush_buffers();
  9. usleep(300000);
  10. }

jednak tu też odsyłam do komentarzy w manualu pod funkcjami flush i ob_flush - gdyż np. w ie deczko inaczej się wyświetli - na operze już chyba od 5 wiersza dopiero wyświetla, na mozilli odrazu (ale to są różnice w wyświetlanu strony w przeglądarkach tylko)

zresztą co tu dużo się rozpisywać - luknij i poczytaj tutaj:
HTTP Streaming - masz tam też linki... w dużym skrócie ogólna idea jest taka, że nawiązujesz połączenie i nie udzielasz odpowiedzi dopóki coś się nie stanie - zostawiasz otwarte połączenie... ogólnie taką komunikację można oprzeć na ajax'ie lub dhtml'u... w podanym linku są też odnośniki do takich projektów jak np. Ajax Push Engine i kilku innych...

ps. a propo samego dhtml'a i sprawdzania czy już jest uzyskana odpowiedź (załączona biblioteka w całości) temat był poruszany tutaj:
[JavaScript]Załączanie prototype poprzez js - zamiast skryptu w dhtml'u można przesłać json'a
leovandamon
Dziękuję bardzo, czyli jednak się da.
Skrypt już przygotowałem, zaraz będę doklejał to do projektu. Dzięki jeszcze raz.

Kocham to forum... biggrin.gif

Pozdrawiam,
Leo van Damon
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.