Jakiej technologii używa Dysk Google, aby otrzymywać aktualizacje w czasie rzeczywistym?

Jakiej technologii używa Dysk Google do pracy w czasie rzeczywistym?

Kiedy wpiszę dokument Dysku Google, do którego dostęp ma wielu użytkowników, Karta Chrome Developer Tools Network pokazuje, że nie ma Websocketów.

Widzę, że dwa najczęstsze typy wywołań AJAX mają albo " bind?"lub" save?"w adresie URL. "ocalić?"Post requests are made every time I type, which makes sense-normal AJAX for sending updates to the server.

Gdy inny użytkownik typy, najnowsze " bind?"Połączenie GET pozostaje otwarte, a ilość danych przesyłanych przez to połączenie wzrasta. / Align = "left" / "S są zamknięte i otwierają się nowe, a logika wydaje się być jakąś funkcją czasu trwania i wielkości danych.

Nie jest to długo oczekiwane, ponieważ gdy serwer wysyła aktualizacje nie kończy odpowiedzi.

To nie są zdarzenia wysyłane przez serwer, ponieważ content-type to " text / plain "zamiast"text/stream".

Czy istnieje nazwa za co Google robi? Jeśli tak, to jak Mogę spróbować to wdrożyć?

Chrome Dev Tools-edycja dokumentu na Dysku Google

Author: Max Heiber, 2016-01-28

1 answers

Czy istnieje Nazwa rozwiązania Google dla aktualizacji w czasie rzeczywistym na dysku (np. "long polling" lub "sockets")?

Do tej pory nie miała nazwy. Nazwę to "bez sondaży", dla kontrastu z sondażami i długimi sondażami.

Z polling, klient okresowo wysyła zapytania o nowe dane.

W przypadku long-polling, klient zapytuje o dane, a serwer zatrzymuje żądanie, kończąc odpowiedź aktualizacjami, gdy są aktualizacje.

No-ankietowanie (co Google Drive does) wykorzystuje sposób, w jaki przeglądarka może odczytać dane z treści żądania przed jego zakończeniem. W związku z tym, że współpracownicy robią więcej wpisów i edycji, serwer dodaje więcej danych do bieżącego żądania. Jeśli spełnione są określone limity (długość zawartości lub czas trwania żądania), żądanie zostanie zakończone, a Klient zainicjuje nowe żądanie z serwerem.

Jak mogę spróbować to zaimplementować?

Aby Klient wysyłał aktualizacje na serwer: może to być zrobione normalnymi postami.

Aby Klient subskrybował aktualizacje z serwera:

  • Klient wysyła GET do strumienia aktualizacji, a następnie zaczyna odczytywać treść odpowiedzi przed jej zakończeniem.

    Obiekty XHR mogą emitować progress zdarzenia przed zakończeniem żądania. (Częściowa) odpowiedź jest dostępna za pomocą xhr.responseText. / Align = "left" / fetch Jeszcze (Stan na Maj 2016).~ ~ Podczas używania fetch można obserwować postępy poprzez spożywanie res. Body ReadableStream.

  • Klient powinien zainicjować nowe żądanie po zakończeniu bieżącego żądania.

Serwer musi:

  • śledź, którzy klienci są subskrybowani do których strumieni aktualizacji.
  • Gdy pojawi się żądanie dotyczące określonego strumienia aktualizacji, Zapisz dane do odpowiedzi, ale nie dokończ odpowiedzi, dopóki ilość danych nie zwiększy się lub przekroczy limit czasu met.

No-polling wydaje się lepszy od long-polling, moim zdaniem, choć nie grałem z nim zbyt wiele. Long-polling wymusza kompromis między opóźnieniem a rozmiarem wiadomości (biorąc pod uwagę stałą szybkość aktualizacji), kompromis no-polling nie musi się dokonać. Inną Wadą long-ankietowania jest to, że może prowadzić do wielu żądań HTTP, płacąc za każdym razem koszty HTTP.

Dużą zaletą No-polling nad WebSockets jest to, że no-polling jest obsługiwany przez każdą przeglądarkę, chociaż Obsługa WebSocket jest całkiem dobra- IE10 + .

 56
Author: Max Heiber,
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
2019-01-24 22:01:46