Czy jest jakiś sposób na przepchnięcie danych z serwera www do przeglądarki?

Oczywiście znam Ajax, ale problem z Ajaxem polega na tym, że przeglądarka powinna często sprawdzać serwer, aby dowiedzieć się, czy są nowe dane. Zwiększa to obciążenie serwera.

Czy jest jakaś lepsza metoda (nawet przy użyciu Ajaxu) niż częste sprawdzanie serwera?

Author: CharlesB, 2008-08-21

18 answers

Yes, what you ' re looking for is COMET http://en.wikipedia.org/wiki/Comet_ (programowanie). inne dobre terminy Google do wyszukiwania są AJAX-push i reverse-ajax.

 68
Author: Greg Hurlman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-22 06:04:17

Tak, nazywa się Reverse Ajax lub Comet . Comet jest zasadniczo pojęciem zbiorczym dla różnych sposobów otwierania długotrwałych żądań HTTP w celu przesyłania danych w czasie rzeczywistym do przeglądarki internetowej. Polecam StreamHub Push Server , mają fajne dema i jest o wiele łatwiej zacząć od innych serwerów. Zobacz pierwsze kroki z Comet i StreamHub tutorial, aby uzyskać szybkie wprowadzenie. Możesz skorzystać z edycji Community, która jest dostępny do pobrania za darmo, ale jest ograniczony do 20 jednoczesnych użytkowników. Wersja komercyjna jest warta samej pomocy technicznej, a także otrzymujesz Adaptery SSL I Desktop.NET i Java client. Pomoc jest dostępna za pośrednictwem Google Group , w sieci jest sporo samouczków i jest też adapter GWT Comet .

 36
Author: Nosrama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-06 23:08:01

W dzisiejszych czasach powinieneś używać WebSockets. Jest to standard 2011, który pozwala inicjować połączenia za pomocą HTTP, a następnie uaktualnić je do dwukierunkowej komunikacji klient-serwer opartej na wiadomościach.

Możesz łatwo zainicjować połączenie z javascript:

var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any");
ws.onmessage = function (evt) 
{
  var message = evt.data;
  //decode message (with JSON or something) and do the needed
};

Obróbka po stronie sever zależy od Twojego stosu tenchnology.

 29
Author: pafinde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-18 20:11:53

Spójrz na Comet (fałszywy fakt, że Ajax jest środkiem czyszczącym, podobnie jak Comet), który jest w zasadzie "reverse Ajax."Pamiętaj, że wymaga to długotrwałego połączenia z serwerem, aby każdy użytkownik mógł otrzymywać powiadomienia, więc pamiętaj o wpływach na wydajność podczas pisania aplikacji.

Http://en.wikipedia.org/wiki/Comet_ (programowanie)

 10
Author: Dan Herbert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-22 15:20:25

Kometa jest zdecydowanie tym, czego chcesz. W zależności od wymagań językowych / ramowych dostępne są różne biblioteki serwerowe. Na przykład WebSync jest zintegrowanym z IIS serwerem comet dla ASP.NET/C#/IIS deweloperzy, i istnieje kilka innych autonomicznych serwerów, jak również, jeśli potrzebujesz ściślejszej integracji z innymi językami.

 6
Author: jvenema,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-27 15:59:04

Zdecydowanie sugerowałbym zainwestowanie trochę czasu w Comet, ale nie znam rzeczywistej implementacji lub biblioteki, z której mógłbyś skorzystać.

Dla swego rodzaju "panelu sterowania callcenter" aplikacji internetowej, która wymagała aktualizacji agenta i statusu kolejki połączeń dla live Callcenter, opracowaliśmy rozwiązanie wewnętrzne, które działa, ale jest daleko od biblioteki, której możesz użyć.

To, co zrobiliśmy, to zaimplementowanie małej usługi na serwerze, która rozmawia z systemem telefonicznym, czeka na nowe zdarzenia i utrzymuje zdjęcie sytuacji. Ta usługa zapewnia mały serwer WWW.

Nasz web-klient łączy się przez HTTP z tym serwerem i pyta o ostatnie zdjęcie (zakodowane w XML), wyświetla je, a następnie przechodzi ponownie, prosząc o nowe zdjęcie. Serwer WWW w tym momencie może:

  • zwróć nowe zdjęcie, jeśli istnieje
  • Zablokuj klienta na kilka sekund (30 w naszej konfiguracji) czekając na ocurr jakiegoś zdarzenia i zmień zdjęcie. Jeśli w tym momencie Nie wygenerowano żadnego zdarzenia, zwraca ono to samo zdjęcie, tylko po to, aby połączenie pozostało żywe, a nie timeout klienta.

W ten sposób, gdy klienci ankiety, to uzyskać odpowiedź w 0 do 30 sekund max. Jeżeli nowe zdarzenie zostało już wygenerowane, natychmiast je otrzyma), w przeciwnym razie blokuje do momentu wygenerowania nowego zdarzenia.

To w zasadzie ankieta, ale trochę mądre ankiety, aby nie przegrzać serwera www. Jeśli Kometa nie jest twoją odpowiedzią, jestem pewien, że można to zrealizować przy użyciu tego samego pomysłu, ale przy użyciu szerzej AJAX lub kodowanie w JSON dla lepszych wyników. Został on zaprojektowany przed erą AJAX, więc jest wiele miejsca na poprawę.

Jeśli ktoś może zapewnić rzeczywistą lekką implementację tego, świetnie!

 5
Author: Pablo Alsina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-21 15:49:24

Ciekawą alternatywą dla Comet jest użycie gniazd we Flashu.

 5
Author: Gilles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 21:13:21

Kolejnym standardowym sposobem jest SSE (zdarzenia wysłane przez serwer, znane również jako EventSource, po obiekcie JavaScript).

 5
Author: Peter V,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-10 17:25:52

Kometa została wymyślona przez Alexa Russella z Dojo Toolkit ( http://www.dojotoolkit.org ). Oto link do więcej informacji http://cometdproject.dojotoolkit.org/

 4
Author: Mike Schall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-03 03:42:40

Są inne metody. Nie wiem, czy są "lepsze" w twojej sytuacji. Możesz mieć aplet Javy, który łączy się z serwerem podczas ładowania strony i czeka na rzeczy, które mają być wysłane przez serwer. Byłoby to nieco wolniejsze przy uruchomieniu, ale pozwoliłoby przeglądarce odbierać dane z serwera rzadko, bez sondowania.

 2
Author: Kibbee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-21 14:09:08

Możesz użyć aplikacji Flash / Flex na kliencie z BlazeDS lub LiveCycle po stronie serwera. Dane mogą być przesyłane do klienta za pomocą połączenia RTMP. Należy pamiętać, że RTMP używa niestandardowego portu. Ale możesz łatwo wrócić do ankiety, jeśli port jest zablokowany.

 2
Author: Buzzy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 16:23:10

Możliwe jest osiągnięcie tego, do czego dążysz poprzez wykorzystanie trwałych połączeń http.

Zobacz artykuł Comet na Wikipedii, to dobre miejsce na początek.

Nie podajesz zbyt wielu informacji, ale jeśli patrzysz na budowanie jakiejś witryny opartej na zdarzeniach (a ' la digg spy) lub czegoś podobnego, prawdopodobnie będziesz szukał implementacji ukrytego IFRAME, który łączy się z adresem url, gdzie połączenie nigdy się nie zamyka, a następnie będziesz naciskać script-tagi z serwera do Klienta w celu przeprowadzenia aktualizacji.

 2
Author: Markus Olsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-28 09:26:47

Może warto sprawdzić Meteor Server który jest serwerem WWW przeznaczonym dla COMET. Nice demo i jest również używane przez twitterfall .

 2
Author: BigJump,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-05 18:40:20

Po otwarciu połączenia z serwerem może być otwarte i serwer może wypchać zawartość dawno temu zrobiłem z użyciem multipart/x-mixed-replace ale to nie działało w IE.

Myślę, że możesz zrobić sprytne rzeczy z ankietami, które sprawiają, że działa to bardziej jak push, nie wysyłając niezmienionych nagłówków treści, ale pozostawiając połączenie otwarte, ale nigdy tego nie robiłem.

 1
Author: sparkes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-21 14:09:06

Możesz wypróbować nasz Składnik komety - choć jest toekstremalnie eksperymentalny...!

 1
Author: Thomas Hansen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 09:28:38

Proszę sprawdzić tę bibliotekę https://github.com/SignalR/SignalR aby wiedzieć, jak dynamicznie przesyłać dane do klientów, gdy stają się dostępne

 1
Author: arun peddakotla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-24 12:17:37

Możesz również zajrzeć do Pushletów Javy Jeśli używasz stron jsp.

 0
Author: Ryan Ahearn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-21 14:18:00

Warto też zajrzeć do ReverseHTTP.

 0
Author: Evan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-19 08:40:53