Krótkie ankiety vs Długie ankiety dla aplikacji internetowych w czasie rzeczywistym?

Buduję aplikację internetową w czasie rzeczywistym z tego co wiem, Najpopularniejsze wybory to short-anling i long-anling. Jakie są zalety i wady pomiaru jednego nad drugim?

Author: Jeff, 2011-01-10

3 answers

  • Krótka ankieta (a. k. a. Ajax based timer):

    Plusy: prostsze, nie zużywające serwera(jeśli czas między żądaniami jest długi).
    Wady: złe, jeśli trzeba być powiadamianym, gdy zdarzenie serwera dzieje się bez opóźnienia. przykład (ItsNat based)

  • Long polling (vel Comet based on XHR)

    Plusy: jesteś powiadamiany, gdy zdarzenie na serwerze dzieje się bez opóźnienia. Wady: bardziej złożone i więcej zasobów serwera. Przykład (ItsNat based)

 36
Author: jmarranz,
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
2011-01-17 14:11:51

Tylko dla samej argumentacji.

Oba są żądaniem http (xhr) , a jego przynajmniej częściowo nieprawdziwe, że wykorzystuje więcej zasobów serwera (zależy całkowicie od technologii, wyjaśni później).

Krótka ankieta.

Wiele żądań, które są przetwarzane w miarę pojawiania się na serwerze. Tworzy duży ruch (wykorzystuje zasoby, ale zwalnia je, gdy odpowiedź zostanie odesłana): {]}

00:00:00 C-> Is the cake ready? 
00:00:01 S-> No, wait.
00:00:01 C-> Is the cake ready?
00:00:02 S-> No, wait.
00:00:02 C-> Is the cake ready? 
00:00:03 S-> Yeah. Have some lad.
00:00:03 C-> Is the other cake ready? ..

Długi sondaż

Jedno żądanie trafia do serwera i klient czeka na odpowiedź (nierozwiązane). W przypadku serwera z php / apache oznaczałoby Zrodzony wątek do obsługi, który rezerwuje zasoby, aż do jego zakończenia. Ruch jest mniejszy, ale szybko jesz zasoby (a raczej blokujesz zasoby). Ale jeśli używasz na przykład Node (lub innego podejścia asynchronicznego-na przykład c++ qt), możesz potencjalnie zminimalizować zużycie zasobów (przechowuj obiekt odpowiedzi dla żądania http i używaj go, gdy praca jest gotowa)

12:00 00:00:00 C-> Is the cake ready? 
12:00 00:00:03 S-> Yeah.Hame some lad.
12:00 00:00:03 C-> Is the cake ready? 

Jeśli porównasz to do krótkiego sondażu, to zobaczymy, że potencjalnie w krótkiej ankiecie użyłeś więcej transferu, ale podczas tych 3s faktycznie bierzesz 1,5 S czasu przetwarzania (oznacza, że coś może wykonać między połączeniami). W przypadku długich sondaży cały czas wykorzystywano te same zasoby. Teraz Zwykle php ze wszystkimi bibliotekami zaczyna się od 4MB pamięci - wtedy masz framework 4-20MB. Załóżmy, że masz 1024MB pamięci RAM dostępnej (za darmo). Powiedzmy, że bądźmy pesymistami i załóżmy, że użyjesz 25 MB na jednej instace php. Oznacza, że można dostać tylko tyle, ile 40 długich skryptów połączeń.

To właśnie z tego powodu możesz obsłużyć potencjalnie dużo więcej z Node, ponieważ node nie odradzałby swoich instancji (chyba że chcesz używać workerów itp.), więc z tą samą pamięcią możesz łatwo dostać się do 10K połączeń wiszących. Można dostać skok w procesorze, jak przyjdą, i kiedy będą one potencjalnie być zwolniony, ale kiedy są bezczynne jego jak nie ma (płacisz tylko za struktury pamięci można zachować w node/c++).

Websocket

Teraz, jeśli chcesz wysłać kilka rzeczy, gdy są w lub poza klientem, przejdź do websockets (protokół ws). Pierwsze wywołanie to rozmiar żądania http, ale później wysyłasz tylko wiadomości, od klienta do serwera (nowe pytania) i serwera do klienta (odpowiedzi lub wypycha-może nawet zrobić broadcast dla wszystkich podłączonych klientów). Istnieją biblioteki PHP websocekts, ale ponownie, użyj innej technologii-node lub C++ najlepiej.

Niektóre libs, jak socket.io mieć własną hierarchię, więc gdy websocket zawiedzie, wraca do długiego lub krótkiego sondażu.

Kiedy stosować.

Krótka ankieta - cóż, nigdy ^^.

Long polling - potencjalnie, gdy wymieniasz pojedyncze połączenie z serwerem, a serwer wykonuje jakąś pracę w tle. Również wtedy, gdy nie będziesz już odpytywał serwera na tej samej stronie. Również wtedy, gdy nie używasz php jako warstwy do obsługi długiego połączenia (node / c++ może być prostą warstwą środkową). Uwaga długie sondowanie może być naprawdę korzystne, ale tylko wtedy, gdy tak się stanie.

Websocket - potencjalnie wymienisz więcej niż jedno lub dwa połączenia z serwerem, lub coś może pochodzić z serwera, którego się nie spodziewałeś / zapytałeś, jak powiadomienie e-mail lub coś takiego. Należy zaplanować różne "pokoje", w zależności od funkcjonalności. Embrace the event based nature of javascript;]

 30
Author: sp3c1,
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-01-28 16:54:01

Jeśli chcesz uzyskać aplikację w czasie rzeczywistym opartą na bazie danych, możesz użyć ajax long poll i Comet. Long poll jest naprawdę dobry dla Twojego zespołu, a także jest bardzo przydatny dla użytkownika MB.Ponieważ gdy użytkownik wyśle żądanie, Użytkownik zapłaci za to jak MB lub jakieś połączenie z Internetem.Na przykład dla Short poll gdy zrobisz coś takiego jak wysyłanie żądania na sekundę, korzystanie z Internetu będzie większe, ponieważ każdy użytkownik połączenia zapłaci za to(oznacza to, że użytkownik luźne Mb), ale w długich sondażach użytkownik będzie płacił tylko za nowe wiadomości.

Websocket {[2] } jest naprawdę dobrą rzeczą, ale kiedy go używasz, powinieneś pomyśleć o jednym dużym problemie, że wiele osób nie może korzystać z chat sistem, ponieważ Websocket jest tylko dla nowej wersji przeglądarek

 0
Author: Ibrahim Hasanov,
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-04-29 06:10:34