![]() |
![]() |
![]()
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? ![]() -------------------- 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... |
|
|
![]() |
![]()
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
![]() ![]() Pomogło ![]() ![]() 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... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Pomogło ![]() ![]() 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ę.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 20:33 |