Oczywiście znam Ajax, ale problem z Ajaxem polega na tym, że przeglądarka powinna często sondować serwer, aby sprawdzić, czy są nowe dane. Zwiększa to obciążenie serwera.
Czy istnieje lepsza metoda (nawet przy użyciu Ajax) inna niż częste sondowanie serwera?
Odpowiedzi:
Tak, szukasz COMET http://en.wikipedia.org/wiki/Comet_(programming) . Inne dobre terminy Google do wyszukania to AJAX-push i reverse-ajax.
źródło
Tak, nazywa się Reverse Ajax lub Comet . Kometa jest w zasadzie ogólnym terminem określającym różne sposoby otwierania długotrwałych żądań HTTP w celu przesyłania danych w czasie rzeczywistym do przeglądarki internetowej. Polecam StreamHub Push Server , mają kilka fajnych wersji demonstracyjnych i znacznie łatwiej jest zacząć niż z jakimkolwiek innym serwerem. Zapoznaj się z samouczkiem Pierwsze kroki z Comet i StreamHub, aby uzyskać szybkie wprowadzenie. Możesz korzystać z wersji Community Edition, która jest dostępna do pobrania za darmo, ale jest ograniczona do 20 jednoczesnych użytkowników. Wersja komercyjna jest tego warta ze względu na samą obsługę, a ponadto otrzymujesz adaptery klienckie SSL i Desktop .NET i Java. Pomoc jest dostępna za pośrednictwem Grupy dyskusyjnej Google, w sieci jest sporo samouczków, jest też adapter GWT Comet .
źródło
W dzisiejszych czasach powinieneś używać WebSockets. Jest to standard z 2011 roku, który umożliwia inicjowanie połączeń za pomocą protokołu HTTP, a następnie aktualizowanie ich do dwukierunkowej komunikacji klient-serwer opartej na wiadomościach.
Możesz łatwo zainicjować połączenie z javascript:
Obsługa po stronie serwera zależy od twojego stosu tenchnology.
źródło
Spójrz na Comet (fałszowanie faktu, że Ajax jest środkiem czyszczącym, podobnie jak Comet), który jest w zasadzie „odwróconym Ajaxem”. Należy pamiętać, że wymaga to długotrwałego połączenia z serwerem, aby każdy użytkownik mógł otrzymywać powiadomienia, więc podczas pisania aplikacji należy mieć świadomość wpływu na wydajność.
http://en.wikipedia.org/wiki/Comet_(programming)
źródło
Kometa jest zdecydowanie tym, czego chcesz. W zależności od wymagań językowych / ramowych dostępne są różne biblioteki serwerów. Na przykład WebSync to zintegrowany z usługami IIS serwer komet dla programistów ASP.NET/C#/IIS , a istnieje również kilka innych samodzielnych serwerów, jeśli potrzebujesz ściślejszej integracji z innymi językami.
źródło
Zdecydowanie sugerowałbym zainwestowanie trochę czasu w Comet, ale nie znam rzeczywistej implementacji ani biblioteki, z której mógłbyś skorzystać.
Dla pewnego rodzaju „panelu sterowania callcenter” aplikacji internetowej, która obejmowała aktualizację statusu agenta i kolejki połączeń dla działającego Callcenter, opracowaliśmy wewnętrzne rozwiązanie, które działa, ale jest daleko od biblioteki, z której można by skorzystać.
To, co zrobiliśmy, to zaimplementowanie małej usługi na serwerze, która komunikuje się z systemem telefonicznym, czeka na nowe zdarzenia i utrzymuje zdjęcie sytuacji. Ta usługa zapewnia mały serwer WWW.
Nasi klienci sieciowi łączą się przez HTTP z tym serwerem sieciowym i proszą o ostatnie zdjęcie (zakodowane w XML), wyświetlają je, a następnie kontynuują, prosząc o nowe zdjęcie. W tym momencie serwer sieciowy może:
W ten sposób, gdy klient sonduje, otrzymuje odpowiedź w ciągu maksymalnie 30 sekund. Jeśli nowe zdarzenie zostało już wygenerowane, pobiera je natychmiast), w przeciwnym razie blokuje się do momentu wygenerowania nowego zdarzenia.
Zasadniczo jest to odpytywanie, ale dość sprytne odpytywanie, aby nie przegrzać serwera internetowego. Jeśli Comet nie jest twoją odpowiedzią, jestem pewien, że można by to zaimplementować przy użyciu tego samego pomysłu, ale w szerszym zakresie wykorzystując AJAX lub kodowanie w JSON, aby uzyskać lepsze wyniki. Zostało to zaprojektowane przed erą AJAX, więc jest wiele do zrobienia.
Jeśli ktoś może zapewnić rzeczywistą lekką implementację tego, świetnie!
źródło
Ciekawą alternatywą dla Comet jest użycie gniazd we Flashu.
źródło
Jeszcze innym standardowym sposobem jest SSE (Server-Sent Events, znane również jako EventSource , po obiekcie JavaScript).
źródło
Kometa została wymyślona przez Alexa Russella z Dojo Toolkit ( http://www.dojotoolkit.org ). Tutaj jest link do dalszych informacji http://cometdproject.dojotoolkit.org/
źródło
Istnieją inne metody. Nie jestem pewien, czy są „lepsi” w Twojej sytuacji. Możesz mieć aplet Java, który łączy się z serwerem podczas ładowania strony i czeka na wysłanie danych przez serwer. Byłoby to trochę wolniejsze podczas uruchamiania, ale pozwoliłoby przeglądarce na rzadkie odbieranie danych z serwera, bez odpytywania.
źródło
Możesz użyć aplikacji Flash / Flex na kliencie z BlazeDS lub LiveCycle po stronie serwera. Dane można wypychać do klienta za pomocą połączenia RTMP. Należy pamiętać, że RTMP używa niestandardowego portu. Ale możesz łatwo wrócić do odpytywania, jeśli port jest zablokowany.
źródło
Możliwe jest osiągnięcie tego, do czego dążysz, dzięki zastosowaniu trwałych połączeń http.
Zapoznaj się z artykułem Comet na Wikipedii, to dobre miejsce na rozpoczęcie.
Nie podajesz zbyt wielu informacji, ale jeśli chcesz zbudować jakąś witrynę sterowaną wydarzeniami (a'la digg spy) lub coś w tym stylu, prawdopodobnie będziesz patrzeć na zaimplementowanie ukrytej ramki IFRAME, która łączy się z adres URL, pod którym połączenie nigdy się nie zamyka, a następnie przesyłasz tagi skryptu z serwera do klienta w celu wykonania aktualizacji.
źródło
Może warto sprawdzić Meteor Server, który jest serwerem WWW zaprojektowanym dla COMET. Ładne demo i jest również używane przez twitterfall .
źródło
Po otwarciu połączenia z serwerem może ono pozostać otwarte, a serwer może wypychać zawartość dawno temu,
multipart/x-mixed-replace
ale to nie działało w IE.Myślę, że możesz robić sprytne rzeczy za pomocą odpytywania, które sprawiają, że działa bardziej jak push, nie wysyłając niezmienionych nagłówków treści, ale pozostawiając otwarte połączenie, ale nigdy tego nie robiłem.
źródło
Możesz wypróbować nasz komponent komety - choć jest on niezwykle eksperymentalny ...!
źródło
sprawdź tę bibliotekę https://github.com/SignalR/SignalR, aby dowiedzieć się, jak dynamicznie przesyłać dane do klientów, gdy staną się dostępne
źródło
Jeśli używasz stron jsp, możesz również zajrzeć do Java Pushletów .
źródło
Może chciałbym również spojrzeć na ReverseHTTP .
źródło