2009-08-10 13 views
6

Zauważyłem, że niektóre z moich ciężkich witryn ajaxowych (te, które odwiedzam, a nie te, które zbudowałem), mają pewne funkcje automatycznego odświeżania. Na przykład w Gmailu, jeśli dostanę nową wiadomość, widzę nową wiadomość bez przeładowania strony. Tak samo jest z klientem IM opartym na przeglądarce Facebooka. Z tego, co wiem, nie ma żadnych apletów java obsługujących wiązanie z przeglądarką serwerów, więc jestem przekonany, że robi to AJAX i być może element, którego nie jestem świadomy. Więc moim najlepszym przypuszczeniem, to zrobić na jeden z dwóch sposobów:Reverse AJAX? Czy zmiany danych mogą być "PUSHED" do skryptu?

  1. javascript dokłada stały „ping” do skryptu po stronie serwera, sprawdzanie wszelkich zmianach, które mogą być dostępne (co tłumaczyłoby, dlaczego niektórzy z tych stron powodują indeksowanie innych stron o dużym obciążeniu). lub

  2. Javascript siedzi bezczynnie i skrypt po stronie serwera faktycznie "popycha" wszelkie aktualizacje przeglądarki. Ale nie jestem pewien, czy to możliwe. Wyobrażam sobie, że jest jakaś funkcja AJAX, która wciąż pinguje, ale po prostu pyta "jakieś aktualizacje?" a skrypt serwera ma prostą wartość boolowską, która mówi "nie" lub "Cieszę się, że pytasz". Ale jeśli tak jest, wszelkie zmiany danych będą wymagały wywołania skryptu bezpośrednio, tak aby zawierał on gotowe zmiany danych i wprowadził zmiany do tej funkcji logicznej.

Czy to możliwe/wykonalne/jak to działa? Wyobrażam sobie coś takiego:

Ktoś wysyła aktualizację e-mail/IM/DB do serwera, serwer wywołuje skrypt za pomocą adresu URL skryptu plus pewna odpowiednia zmienna GET, skrypt odnotowuje zmianę i aktualizuje zmienną "dostępne aktualizacje" , AJAX otrzymuje odpowiedź, że faktycznie są aktualizacje, AJAX uruchamia swoją normalną funkcję "aktualizacji strony", która wykonuje normalne skrypty aktualizacji i wyświetla je przeglądarce.

Pytam, ponieważ wydaje się naprawdę nieskuteczne, że js robi tylko stałą kontrolę, która wymaga a) serwera do pracy co 1,5 sekundy, i b) mojej przeglądarki do pracy co 1,5 sekundy, tak aby po mojej stronie Mogę powiedzieć: "Och chłopcze, mam komunikator !, tak jak prawdziwy klient IM!"

Odpowiedz

6

Przeczytaj o Comet

+0

Wow, użyłem nawet tych samych haseł. to prawie żenujące.Ale moje początkowe wyszukiwanie, jak to zrobić w PHP, wspomina nieskończone skrypty pętli. Czy nieskończona pętla musi odbywać się gdzieś wzdłuż linii, aby tego typu rzeczy działały? Dlaczego rzeczywiste zmienione źródło danych (serwer IMAP, DB, plik txt, cokolwiek) nie uruchamia skryptu, aby się obudzić i obsługiwać rzeczy? – Anthony

0

ja faktycznie pracuje na małej .NET Web App, który używa Ajax techniką opisaną długo wyborczym.

W zależności od używanej technologii można użyć mechanizmów sygnalizacji wątków do wstrzymania żądania do czasu pobrania aktualizacji. W środowisku ASP.NET uruchamiam mój serwer na jednym komputerze, więc przechowuję odwołanie do mojego obiektu Producer (który zawiera wątek przetwarzający dane). Aby zainicjować pobieranie danych, wywoływana jest metoda Subskrybuj mojej usługi, która tworzy obiekt Konsumenta zarejestrowany w Producer. Jeśli konsument jest długim trybem odpytywania, ma on AutoResetEvent, który jest sygnalizowany za każdym razem, gdy otrzymuje nowe dane, i gdy klient sieci WWW wysyła żądanie danych, konsument najpierw czeka na zdarzenie resetowania, a następnie zwraca je.

Ale wspomniałeś coś o PHP - o ile wiem, utrzymywanie jest utrzymywane przez serializację, a nie przechowywanie obiektu w pamięci, więc nie wiem, jak można odwołać się do obiektu producenta za pomocą $ _CACHE [] lub $ _SESSION []. Kiedy rozwinąłem się w PHP nigdy tak naprawdę nie wiedziałem nic o wielowątkowości, więc nie bawiłem się z tym, ale myślę, że możesz to sprawdzić.

Używanie nieskończonych pętli pochłonie dużo mocy obliczeniowej - najpierw wyczerpałbym wszystkie pozostałe opcje.

Powiązane problemy