sourcetip

Google 문서와 유사한 라이브 업데이트를 수행하는 방법은 무엇입니까?

fileupload 2023. 7. 27. 22:12
반응형

Google 문서와 유사한 라이브 업데이트를 수행하는 방법은 무엇입니까?

모든 사용자가 문서의 다른 사용자의 작업을 "즉각" 볼 수 있는 Google Doc의 라이브 업데이트와 매우 유사한 작업을 수행하고 싶습니다.

이를 위해 지금까지 제 생각은 다음과 같습니다.

  • 지속적인 AJAX 요청이 백그라운드에서 수행되고 있습니까(이는 성능 집약적으로 보입니다)?
  • 서버가 모든 클라이언트에 알림을 푸시하고 그에 따라 업데이트할 수 있는 방법은 분명히 없습니까?
  • AJAX는 매 X초마다 해당 X초 내에 수행할 작업의 버퍼/시간 경과를 요청합니다(실시간 효과 시뮬레이션).

저는 이 효과를 얻기 위해 노력한 다른 사람들의 경험을 알고 싶습니다.이것을 하는 가장 좋은 방법은 무엇입니까?

모든 도움에 감사드립니다.

참고: 실시간 문서 편집 솔루션을 특별히 찾고 있는 것은 아닙니다.구글이 문서로 하는 것과 같은 개념의 해결책을 찾고 있습니다.저는 실제로 그 솔루션을 약간 다른 방식으로 사용할 것입니다.

저는 Long-poll 전략에 찬성합니다. 각 클라이언트는 서버에 요청을 열지만 서버는 연결을 끊지 않고 가끔 자바스크립트를 보냅니다.

AJAX 요청이 계속되면 서버가 중지됩니다.

구글 모브라이트를 확인해보세요.운영 변환을 통해 HTML 양식의 협업 편집을 가능하게 하는 드롭인 라이브러리입니다.

서버에서 이벤트를 뒤로 미루는 것은 쉬운 부분이며, 이를 위한 여러 가지 방법이 있습니다.모든 클라이언트에서 상태를 일관되게 유지하는 것이 어려운 부분입니다.여기서 운영 혁신 알고리즘이 등장합니다.

2023년 업데이트: 일반적으로 커뮤니티는 피어 간 데이터 동기화를 위해 CRDT 라이브러리로 이동했습니다.YJSAutomerge는 이와 같은 것을 만드는 데 인기 있는 선택입니다.

Ajax 접근법은 한 가지 방법입니다.당신은 채팅 애플리케이션처럼 그것을 구현할 수 있습니다.실제 방법은 표시되는 데이터에 따라 달라집니다.요컨대

  1. 세션을 만듭니다.문서를 공유하는 사용자를 저장할 수 있습니다(예: 엑셀 파일).
  2. 사용자 A가 변경하면(예: 업데이트 셀 A5) Ajax를 사용하여 서버로 변경사항을 전송합니다.변경 사항은 도착 날짜 또는 일부 인덱스 값과 함께 저장할 수 있습니다.
  3. 페이지에서 백그라운드 Ajax 호출이 때때로 실행됩니다.요청의 일부로, 마지막 액세스 날짜도 지나갑니다.
  4. 요청을 수신하면 마지막 시간 또는 인덱스에서 변경된 모든 내용을 제공합니다.다음 요청에 사용할 수 있도록 새 날짜 또는 인덱스 값을 응답의 일부로 포함할 수 있습니다.
  5. 상위 X 요소에 액세스할 수 없는 경우 해당 요소를 제거할 수 있습니다.

성능 집약적인지 여부는 대부분 모든 것을 어떻게 구성하느냐에 달려 있습니다.

다른 옵션은 웹 소켓입니다.개인적으로 사용한 적은 없지만 사용자가 사용할 브라우저를 제어할 수 있다면 시도해 볼 수 있습니다.서버가 데이터를 브라우저에 푸시할 수 있습니다.일부 링크:Firefox의 웹 소켓 JS 및 웹 소켓

다른 대안은 Orbitted입니다.

Orbitted는 브라우저에서 순수한 JavaScript/HTML 소켓을 제공합니다.웹 응용 프로그램을 임의의 백엔드 시스템과 통합할 수 있는 웹 라우터 및 방화벽입니다.플러그인을 사용하지 않고 브라우저에서 모든 네트워크 프로토콜을 구현할 수 있습니다.

Orbitted는 오래 지속되는 혜성 연결에 최적화된 HTTP 데몬입니다.새로운 애플리케이션 및 기존 애플리케이션과 쉽게 통합할 수 있도록 설계되었습니다.Orbitted를 사용하면 Flash나 Java와 같은 외부 플러그인을 사용하지 않고 채팅방이나 인스턴트 메시징 클라이언트와 같은 실시간 웹 응용 프로그램을 작성할 수 있습니다.

만약 당신의 사용자들이 최신 브라우저만 사용한다면 HTML 5와 함께 제공되는 웹 소켓 표준을 사용해 볼 것입니다. 미래에는 점점 더 많은 브라우저가 그것을 지원할 것이고 구글과 애플과 같은 회사들이 이것을 연구하고 있습니다.시작 튜토리얼: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

웹 소켓이 널리 지원되지 않기 때문에 웹 소켓을 사용하지 않으려면 Comet을 검색해야 합니다.이것이 구글 독스가 수행하는 방식일 것입니다.

실시간 협업 리치 텍스트 편집기를 찾고 있다면 EtherPad는 오픈 소스로 제공됩니다.

Ajax 요청 수를 제한하는 한 가지 방법은 간격을 좁히는 것입니다.매초마다 요청할 필요는 없습니다.활동이 포함된 응답을 받으면 1초 후에 다른 요청을 수행합니다.활동이 없는 경우 2초, 4초 등 최대 30초의 간격으로 요청합니다.업데이트가 발생하면 타이머를 재설정합니다.기본적으로 GUI가 가능한 한 대응력이 뛰어난 것처럼 보이도록 스마트한 방식으로 요청을 띄웁니다.

저는 대기와 같은 Comet 프레임워크를 사용하는 것을 추천합니다.메시지에 대한 전송 메커니즘을 자동으로 선택합니다. 운이 좋으면 웹 소켓이 될 수 있습니다(그러나 추상화되므로 걱정할 필요가 없습니다).어쨌든 개별 요청/응답과 발생할 모든 오류 소스 및 브라우저 버그를 처리할 필요가 없다면 매우 유용합니다.저도 가봤어요.용이 있습니다. :-)

또한 pubsubhubbub - http://code.google.com/p/pubsubhubbub/ 짧은 소개를 위해 비디오를 봅니다.

또한 ShareJS a Operational Transform Library와 ShareJs를 기반으로 구축된 프레임워크인 Derby도 살펴볼 수 있습니다.둘 다 node.js 백엔드를 가지고 있습니다. sharejs는 Google Wave 엔지니어에 의해 작성되었습니다.

언급URL : https://stackoverflow.com/questions/3687034/how-to-do-live-updating-similar-to-google-docs

반응형