Jak wykonać aktualizację na żywo podobną do Google Docs?

Chcę zrobić coś bardzo podobnego do aktualizacji Google Doc NA ŻYWO-gdzie wszyscy użytkownicy mogą "natychmiast" zobaczyć działania innych użytkowników w doc.

Aby to osiągnąć, moje dotychczasowe pomysły:

  • ciągłe żądania AJAX wykonywane w tle (wydaje się to wymagającym wydajności)?
  • na pewno nie ma sposobu, aby serwer wypychał powiadomienia do wszystkich swoich klientów i odpowiednio je aktualizował?
  • AJAX żąda co X sekund z bufor / upływ czasu działań, które należy wykonać w tych x sekundach (symulowanie efektu w czasie rzeczywistym)?

Chciałbym poznać doświadczenie innych w próbach osiągnięcia tego efektu. Jak najlepiej to zrobić?

Wszelka pomoc jest mile widziana.

Uwaga: nie szukam specjalnie rozwiązania do edycji dokumentów w czasie rzeczywistym. Szukam rozwiązania tej samej koncepcji, co Google robi z ich dokumentami. Będę korzystał z tego rozwiązania w nieco inaczej.

Author: Stephen Watkins, 2010-09-10

11 answers

Głosuję za strategią Long-poll : każdy klient otwiera żądanie do serwera, ale serwer nigdy nie zrywa połączeń i od czasu do czasu wysyła fragmenty java-script.

Stałe żądania AJAX zabiłyby Twój serwer.

 12
Author: BarsMonster,
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
2014-06-10 15:55:47

Sprawdź google mobwrite . Jest to biblioteka drop-in, która umożliwia wspólną edycję formularzy html poprzez transformację operacyjną.

Odbieranie zdarzeń z serwera jest łatwą częścią, istnieje wiele sposobów, aby to zrobić . Zapewnienie, że państwo jest spójne wśród wszystkich klientów, to jest najtrudniejsza część. W tym momencie pojawia się algorytm transformacji operacyjnej.

 8
Author: Joeri Sebrechts,
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
2010-09-14 20:33:10

Podejście Ajax jest jednym ze sposobów. Możesz zaimplementować go jak aplikacje czatu. Rzeczywisty sposób będzie zależał od wyświetlanych danych. W skrócie

  1. Utwórz sesję. Może pomieścić użytkowników udostępniających doc (np. plik excel)
  2. Gdy użytkownik a dokona zmiany (np. zaktualizuj komórkę A5), użyj Ajax, aby wysłać zmiany do serwera. Zmiana może być zapisana z datą przybycia lub pewną wartością indeksu.
  3. wywołanie Ajax w tle jest wywoływane przez stronę od czasu do czasu. Jako część z żądania przechodzi również ostatnia data dostępu.
  4. po otrzymaniu żądania, po prostu podajesz wszystkie zmiany dokonane od ostatniego razu lub indeksu. Możesz dołączyć nową datę lub wartość indeksu jako część odpowiedzi, aby można ją było użyć do następnego żądania.
  5. Gdy jesteś pewien, że górne elementy X nie będą dostępne, możesz je usunąć

To, czy będzie to wydajnościowe, czy nie, zależy w dużej mierze od tego, jak skonstruować wszystko.

Drugą opcją są gniazda sieciowe. Nie używałem go osobiście, ale jeśli masz kontrolę nad przeglądarką, której będą używać Twoi użytkownicy, możesz dać jej szansę. Pozwala serwerowi na przesyłanie danych do przeglądarki. Kilka Linków: Web Sockets JS i Gniazda Sieciowe w Firefoksie

 3
Author: ritcoder,
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
2010-09-12 22:25:57

Inna alternatywa to :

Orbit zapewnia czystą Gniazdo JavaScript / HTML w przeglądarce. Jest to router internetowy i firewall, który pozwala na integrację z Internetem aplikacje z dowolnym back-endem systemy. Możesz zaimplementować dowolną sieć protokół w przeglądarce-bez uciekanie się do wtyczek.

Orbited jest demonem HTTP, który jest zoptymalizowany pod kątem długotrwałej komety znajomości. Przeznaczony jest do łatwa integracja z nowymi i istniejących aplikacji. Orbit pozwala piszesz www w czasie rzeczywistym aplikacji, takich jak czat lub klient komunikatora, bez korzystanie z zewnętrznych wtyczek, takich jak Flash lub Java.

 3
Author: LarsH,
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
2010-09-15 04:43:41

Jeśli Twoi użytkownicy używają tylko nowoczesnych przeglądarek, to wypróbowałbym standard websocket z HTML 5. Coraz więcej przeglądarek będzie ją obsługiwać w przyszłości, a firmy takie jak Google i Apple pracują nad tym. Tutaj pierwsze kroki tutorial: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

 3
Author: Nils,
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
2010-09-16 14:18:45

Jeśli nie chcesz używać gniazd sieciowych, ponieważ nie są one szeroko obsługiwane, będziesz chciał sprawdzić Comet. Tak pewnie robi to Google Docs.

 2
Author: novalis,
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
2010-09-12 22:32:43

EtherPad został udostępniony na zasadzie open source, jeśli szukasz edytora rich text editor do współpracy w czasie rzeczywistym.

 2
Author: Annie,
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
2010-09-16 04:40:01

Jednym ze sposobów na ograniczenie # żądań Ajaksu jest sprytne ich rozdzielenie. Nie musisz składać prośby co sekundę. Gdy otrzymasz odpowiedź z aktywnością, wykonaj kolejne żądanie w ciągu 1 sekundy. Jeśli nie ma aktywności, to 2 sekundy, następnie 4 itd., z maksymalnie może 30 sekund pomiędzy żądaniami. Gdy pojawią się aktualizacje, zresetuj timer. Zasadniczo, Rozmieść swoje żądania w inteligentny sposób, aby GUI wyglądał jak najbardziej responsywnie.

 1
Author: tenfour,
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
2010-09-12 22:39:10

Zalecam użycie struktury Kometowej, takiej jak Atmosphere. Automatycznie wybierze mechanizm transportu dla Twoich wiadomości, który może być websockets, jeśli masz szczęście (ale ponieważ jest to abstrakcyjne, nie musisz się martwić). W każdym razie jest to świetna wartość, jeśli nie masz do czynienia z indywidualnymi prośbami / odpowiedziami i wszystkimi źródłami błędów i błędami przeglądarki, które napotkasz. Byłem tam. Są smoki. :-)

 1
Author: Waldheinz,
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
2010-09-17 20:29:46

Zobacz też pubsubhubbub - http://code.google.com/p/pubsubhubbub/ Obejrzyj film i obejrzyj krótkie wprowadzenie.

 1
Author: Sharun,
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
2010-09-19 08:39:01

Możesz też rzucić okiem na ShareJSA Operational Transform libary oraz Derby który jest frameworkiem zbudowanym na sharejs. Oboje mają węzeł.js backends-sharejs został napisany przez inżyniera Google Wave.

 0
Author: sam,
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-09-23 17:07:15