Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Coś na styl Comet przy pomocy AJAX, Poszukuje kogoś komu się udało (o ile to możliwe)
Sephirus
post 29.06.2011, 21:03:02
Post #1





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Witam,

Ostatnio natrafiłem na kwestie stworzenia skryptu instalacyjnego w PHP do zainstalowania i skonfigurowania na serwerze jakiejś konkretnej aplikacji. Idea jest prosta skrypt całość wrzucamy na serwer, odpalamy powiedzmy "install.php" uzupełniamy ustawienia i klikamy "install". Od strony PHP jest to ogarnięte - robi wszystko co potrzeba. Sęk w tym, że zażyczono sobie do tego aby ten skrypt instalacyjny pokazywał postęp oraz statusy "jak idzie".

Poczytałem trochę to tu to tam i wpadłem na pomysł aby wykorzystać do tego AJAX'a. Widzę to tak - strona otwiera połączenie poprzez ajax'a ze skryptem odpowiedzialnym za instalacje. Skrypt ten działa nieustannie aż do zakończenia wszelkich działań. W tym czasie po zakończeniu jakiś konkretnych kroków przekazuje dane do przeglądarki i JS, które mogą być przerobione.

Odrobiłem lekcję u profesora Google ale nie znalazłem tego czego chciałem. Long polling tutaj to za mało, potrzebował bym wiedzy czy komuś udało się zrobić coś na styl techniki Comet pod AJAX'em... Czy jest to w ogóle możliwe? Czy komuś się to udało? smile.gif Wiem, że dostępna jest taka opcja jako aplet JAVY ale dowalanie APLETU JAVY do skryptu instalacyjnego przekreśla kompatybilność itd...


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post 29.06.2011, 22:09:56
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Muszę przyznać, że to niezłe obejście problemu wink.gif Wielkie dzięki w sumie myślałem o czymś podobnym w razie czego ale nie umiałem tego tak fajnie sprecyzować wink.gif

Pomogło wink.gif Zrobię to w ten sposób na razie ale i tak podrążę jeszcze ten temat tongue.gif

THX!


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
zegarek84
post 29.06.2011, 23:00:05
Post #3





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

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


Cytat(Sephirus @ 29.06.2011, 23:09:56 ) *
Pomogło wink.gif Zrobię to w ten sposób na razie ale i tak podrążę jeszcze ten temat tongue.gif

Więc tak skrótowo flash z JavaScript może się komunikować więc może służyć za zdarzeniowego pośrednika w komunikacji - tu można by zastosować w pełni comet...

zakładamy, że nie ma flasha zainstalowanego i chodzi nam tylko o "komunikację zdarzeniową"...
od podstaw tej komunikacji na obejście zwykłym ajax'em...

oczywiście przy ajax'ie masz jeszcze narzut na nagłówki http i kosztowne każdorazowo nowe połączenie otwierane i zamykane

zrób sobie skrypcik ze sleep po 1s i pętlą np. 20 - do wymuszenia wysłania treści (wszystko zależy od konfiguracji serwera ale nieraz sam flash nie wystarczy) zastosuj zestaw funkcji
@ob_flush();
@flush();
@ob_end_flush();

lub ustaw ob_implicit_flush(true)
wiadomo, że będziesz widział linijka po linijce tak jakby na żywo obserwowany comet - ale ajax'a odpowiedź dostaniesz dopiero na końcu po zamknięciu połączenia

to co niemal każdy stosuje np. do czatów to odpytywanie serwera co sekundę - MASAKRA ISTOTNA (w przypadku tego tematu szkoda było wymyślać coś lepszego)


nieefektowne tego obejście, a w zasadzie efektowne ale jeszcze mocno lipne to przez AJAX pytasz się skrypta o jakieś zdarzenie - najlepiej najprościutszego skrypta tylko sprawdzającego tablicę zdarzeń w bazie danych i który jeśli nie ma nic do przekazania idzie spać na jakiś interwał czasu coby dla jednego urzyszkodnika nie zajechać serwera (na ileś tam milisekund) i w następnym przebiegu pętli sprawdza tablicę w bazie czy jest jakaś wiadomość dla szkodnika - jeśli jest zostaje zwrócony komunikat i skrypt kończy swoje działanie np. przez exit jednocześnie zamykając połączenie lub jeśli skrypt jeszcze coś miał zrobić możesz wysłać odpowiednie nagłówki z długością treści i by przeglądarka zamknęła połączenie a skrypt coś zrobi i kończy działanie (ale o tym nie potrzebnie wspomniałem że może jeszcze coś skrypt robić - to już lepiej niech inny moduł wykonuje a to niech będzie najprostszy skrypt) - gdy połączenie zostanie zamknięte skrypt js dostaje odpowiedź ajax i odpowiednio ta odpowiedź jest obrobiona - ponieważ czekamy na następne zdarzenie natychmiast odpytujemy po raz kolejny ten sam skrypt by było otwarte połączenie...
oczywiście obsłużyć trzeba też błędy komunikacji w js jak zbyt długi czas oczekiwania i inne powodujące zerwanie połączenia i trzeba nawiązać od nowa połączenie
W TYM ROZWIĄZANIU KAŻDY SZKODNIK PRZEZ AJAX ŁĄCZY SIĘ Z MINI DEMONKIEM a cała aplikacjia zapisuje komunikaty w tablicy - gdy komunikat jest pobrany przez demonka to demonek usuwa ten komunikat z tablicy komunikatów...
jeszcze poprawkę trzeba wziąć na limit otwartych połączeń z tą samą domeną - więc dobrze by było odpytywać subdomenę lub inną domenę...

JESZCZE TO NIE JEST IDEALNE GDYŻ NA SERWERZE POWSTANIE TYLE DEMONKÓW ILU JEST SZKODNIKÓW ;]

optymalizacja to zrobienie jednego demonka z rozwiązania powyżej - ale to już trzeba by napisać mini serwerek www w php obsługujący każde połączenie i żądanie nasłuchujący na jakimś porcie (lub na innej domenie) - niby są też takie małe projekciki nawet na serwerki całych stron www ale to tylko ciekawostka...

rozwiązanie które z Twojej strony wymagało by najmniejszego nakładu pracy to gotowiec APE (Ajax Push Engine) - z tego jeszcze nie korzystałem jakoś i bodajże jeśli jest zainstalowany flash to chyba z niego korzysta a jeśli nie to z komunikacji ajax... ale nowsza wersja podobno na innych stronkach nie potrzebuje proxy więc chyba samą technikę ajax zastąpili np. przez jsonp (gdzie skutek ten sam o omija się tak ograniczenia domenowe) [tak przy okazji jakbyś miał załączać zewnętrze skrypty js i dopiero po ich załadowaniu wykonywać jeszcze coś to temacik np. [JavaScript]Załączanie prototype poprzez js] - w APE jest też napisany jakiś serwerek ale to głównie bodajże biblioteka js...

i jeszcze może link do jakiegoś polskiego blogu:
APE: Comet serwer oraz kompletny framework javascript. Kompleksowe rozwiązanie Ajax Push.

może o niczym nie zapomniałem lub nic istotnego nie pominąłem ;]






--------------------
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

Posty w temacie


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 - 20:33