Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [solved][PHP][JS] Wysyłanie danych przez serwer do usera
leovandamon
post 31.01.2010, 21:57:30
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 3
Dołączył: 5.01.2008
Skąd: Czwarty Świat

Ostrzeżenie: (0%)
-----


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.

Ten post edytował leovandamon 1.02.2010, 19:05:15


--------------------
Mój blog: http://test.dragonsheart.eu/
DH Corp: http://www.dhcorp.pl/
Go to the top of the page
+Quote Post
wookieb
post 31.01.2010, 22:06:35
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.

Ten post edytował wookieb 31.01.2010, 22:07:17


--------------------
Go to the top of the page
+Quote Post
leovandamon
post 31.01.2010, 22:09:07
Post #3





Grupa: Zarejestrowani
Postów: 41
Pomógł: 3
Dołączył: 5.01.2008
Skąd: Czwarty Świat

Ostrzeżenie: (0%)
-----


W takim razie mówi się trudno.

Dzięki serdeczne za szybką odpowiedź.

Pozdrawiam,
Leo van Damon.


--------------------
Mój blog: http://test.dragonsheart.eu/
DH Corp: http://www.dhcorp.pl/
Go to the top of the page
+Quote Post
zegarek84
post 31.01.2010, 23:52:14
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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

Ten post edytował zegarek84 1.02.2010, 00:20:56


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
leovandamon
post 1.02.2010, 11:42:46
Post #5





Grupa: Zarejestrowani
Postów: 41
Pomógł: 3
Dołączył: 5.01.2008
Skąd: Czwarty Świat

Ostrzeżenie: (0%)
-----


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


--------------------
Mój blog: http://test.dragonsheart.eu/
DH Corp: http://www.dhcorp.pl/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 21:12