운영 변환 라이브러리?
-
19-09-2019 - |
문제
여러 사용자 (ALA Google DOCS)간에 텍스트를 실시간으로 동기화 할 수있는 라이브러리를 찾고 있습니다.
나는 운영 변화에 걸려 넘어 졌는데, 그것은 내 요구에 맞는 것 같습니다. 나는 OT의 요점을 이해하지만 OT의 수학이나 구현은 아닙니다.
따라서 텍스트 영역에 연결되어 변환을 생성 한 다음 다른 클라이언트에 해당 변환을 적용 할 수있는 Drag'n'drop JavaScript 라이브러리가 있는지 궁금합니다.
(나는 EtherPad 소스를 얻었지만 머리 나 꼬리를 만들 수는 없습니다. 누군가 EtherPad의 구현을 활용하는 방법을 지적 할 수 있다면, 그게 좋을 것입니다!)
해결책
Google Wave의 OT 구현의 일부는 오픈 소스이며 더 많은 부분이 다가오고 있다고 생각합니다.
이것이 당신이 찾고있는 것인지 확실하지 않지만 OT의 대안은 차동 동기화:
- Google-Diff-Match-Patch- 일반 텍스트를위한 Diff, Match 및 패치 라이브러리: "DIFF 일치 및 패치 라이브러리는 일반 텍스트 동기화에 필요한 작업을 수행하기 위해 강력한 알고리즘을 제공합니다."
- Google-Mobwrite- 실시간 동기화 및 협업 서비스: "Mobwrite는 양식 및 웹 응용 프로그램을 협업 환경으로 변환합니다. 간단한 단일 사용자 시스템을 만들고, 한 줄의 JavaScript를 추가하고, 즉시 협업 시스템을 얻으십시오."(Google-Diff-Match-Patch를 사용합니다.)
다른 팁
전파 엔지니어 중 한 명이 현재 명명 된 ShareJS라는 협업 편집 알고리즘의 커피 스크립트 구현을 출시했습니다. Sharedb.
내가 찾은 솔루션을 요약하겠습니다.
운영 변환 : 예를 들어
- Google Wave OT. 이 접근법은 소위 목성 접근 방식을 기반으로합니다.
- sharejs. Google Wave OT와 동일한 OT 알고리즘을 기반으로합니다.
- Coweb-jsoe. COT를 기반으로 - P2P 메시지 전파를 지원하는 매우 정교한 OT 접근법.
- 오펜 코브. 그것은 많은 유사한 문제에 대한 본격적인 프레임 워크를 제공하기 위해 OpenCoweb-jsoe를 활용합니다.
- OT.JS는 ShareJS의 작동 유형을 기반으로합니다.
- DriveSDK. 많은 일을 할 수있는 매우 흥미로운 API (예 : 그래프에 대한 협업).
- Swellrt는 Apache Wave의 포크입니다. IS는 연합되어 있으며 풍부한 텍스트를 지원합니다.
차동 동기화 :
- Neil Fraser의 Diff-Match-Patch.
- Mobwrite는 Diff-Match-Patch 알고리즘을 활용합니다.
CRDT (정류 복제 데이터 유형) :
- 공유 유형의 구현을 허용하는 다양한 CRDT 알고리즘이 있습니다. 일부 CRDT는 P2P 메시지 전파와 함께 작동하며 일부 CRDT는 클라이언트 서버 모델에 의존합니다.
- yjs 임의의 데이터 유형 (Richtext, Array, Hash Maps, Extendable)을 공유 할 수 있습니다. P2P 통신 프로토콜에 대한 오프라인 지원 및 지원 (XMPP, Websockets 및 WebRTC 용 모듈이 있음)
- Swarmjs 클라이언트 서버 공유 데이터베이스가 오프라인 지원을 제공합니다. React와 잘 작동합니다
- woot Woot CRDT의 구현
- CRDT 또 다른 CRDT 구현
- 자동차
OT 라이브러리 :
HWIOS WebSocket 프로젝트 내에서, 나는 문서 상태를 동기화하기 위해 둘 다 (서버 사이드의 py-infinote, jinfinote)의 콤보를 성공적으로 사용했습니다.
OT.JS 라이브러리 https://github.com/operational-transformation/ot.js 다중 사용자 시나리오에 유용 할 수 있습니다.
이 문제에 대한 턴키 또는 "드래그 앤 드롭"솔루션은 공유 된 돌연변이 상태를 안정적으로 동기화하는 복잡성으로 인해 실제로 존재하지 않았습니다. Dmonad의 응답은 괜찮은 라운드 업이며 사용 가능한 솔루션에 대한 최신 개요를 게시했습니다. 여기.
이 질문은 꽤 오래되었지만 수렴 (면책 조항 : 저는 설립자입니다)는 데이터 동기화뿐만 아니라 협업 UX를 구축하는 데 유용한 다른 API를 제공하는 가장 많은 턴키 솔루션을 제공합니다. 여기 예입니다 요청한 내용을 정확하게 표시 : 여러 클라이언트에서 텍스트 필드의 동기화.
그렇지 않으면, Sharedb 많은 사람들의 요구에 맞는 훌륭한 오픈 소스 솔루션입니다.
이 JavaScript 라이브러리도 확인하십시오.
- https://github.com/vitotafuni/jsottest <클라이언트 측 JavaScript 구현
- https://github.com/fitzgen/operational-transformation-example <노드 JS 클라이언트/서버 구현
JS 클라이언트 LIB (Strophe.js)를 사용하면 클라이언트 측 OT LIB (JSOTTEST)와 함께 무료 XMPP 서버 (예 : JABBER.org)를 사용하여 완전한 클라이언트 서버 시스템을 구축 할 수 있습니다.
코드를 수정할 시간이 있으면 데모 클라이언트-서버 채팅 시스템의 SRC를 제출하겠습니다.
NPM에는 node.js 용 멋진 구약 라이브러리가 있습니다.
- https://npmjs.org/package/ot - Codemirror 및 Ace 내장 어댑터 및 클라이언트 및 서버 구현
- https://npmjs.org/package/changesets - 노드 및 브라우저에서 사용할 수있는 일반 OT 라이브러리; 주위를 보낼 수있는 '변경 사항'(본질적으로 차이)을 구축 할 수 있습니다.
당신은 사람들과 이야기 할 수 있습니다 세다넷. CEDA는 폐쇄 소스이며 웹 사이트에서 무료 평가판을 사용할 수 없습니다. 나는 CEDA의 개발에 관여했으며 상업 프로젝트에서 계속 협력 했으므로이 길을 따라 가면 피드백/조언을 제공 할 수 있습니다.
Etherpad lite가있는 etherpad.org는 다른 솔루션보다 우수합니다.
우리는 운영 변환과 버전 관리를 결합한 협업 편집기를 구축하고 있습니다. 이렇게하면 오프라인 및 온라인 콜라 브를 모두 지원할 수 있습니다. 우리는 어제 오픈 소스 스택의 일환으로 OT Library를 출시했습니다.
http://interior.substance.io/modules/operator.html
우리는 또한 버전 작성 라이브러리를 기부했습니다.
나는 OT 컨트롤 레이어를 구현하는 작은 Unixy (한 가지 일을 잘하고 잘 수행)를 작성하여 다른 OT 유형을 연결할 수 있도록했습니다 (모든 sharejs 준수 유형을 지원). Sharejs와 비슷하지만 의견이 적고 추상적이지 않습니다.