운영 변환 라이브러리?
여러 사용자 (Google Docs)간에 실시간으로 텍스트를 동기화 할 수있는 라이브러리를 찾고 있습니다.
나는 내 요구에 맞는 것처럼 보이는 Operational Transformation을 우연히 발견했습니다. 그렇게 말하면서 나는 OT의 요지를 이해하지만 OT의 수학이나 구현은 이해하지 못합니다.
따라서 텍스트 영역에 연결하여 변환을 생성 한 다음 해당 변환을 다른 클라이언트에 적용 할 수있는 드래그 앤 드롭 Javascript 라이브러리가 있는지 궁금합니다.
(저는 Etherpad 소스를 얻었지만 머리와 꼬리를 만들 수 없습니다. 누군가 Etherpad의 OT 구현을 활용하는 방법을 지적 할 수있는 그것도 좋을 것입니다!)
저는 Google Wave의 OT 구현의 일부가 오픈 소스라고 생각합니다 (더 많은 부분이 제공 될 예정입니다).
확실하지 않지만 OT의 대안은 확실하지 않습니다 .
- Google-Diff-Match-Patch- 일반 텍스트 용 Diff, Match 및 Patch 라이브러리 : " Diff Match 및 패치 라이브러리는 일반 텍스트를 동기화하는 데 필요한 작업을 수행하는 강력한 알고리즘을 제공합니다. "
- Google-MobWrite- 실시간 동기화 및 협업 서비스 : " MobWrite는 양식과 웹 애플리케이션을 협업 환경으로 변환합니다. 간단한 사용자 단일 시스템을 만들고 JavaScript 한 줄을 추가하면 즉시 협업 시스템을 사용할 수 있습니다. "(Google-Diff 사용 -매치-패치.)
전 웨이브 엔지니어 중 하나는 지금은 이름의 공동 편집 알고리즘이라는 ShareJS의 커피 펼쳐보기, 발표했다 ShareDB을 .
내가 해결책을 요약하겠습니다.
운영 변환 : 예
- Google Wave OT. 접근 방식은 소위 목성 접근 방식을 기반으로합니다.
- ShareJs. Google Wave OT와 동일한 OT 알고리즘을 기반으로합니다.
- 거미줄 -jsoe. COT 기반 -p2p 메시지 전파도 지원하는 매우 정교한 OT 접근 방식입니다.
- OpenCoweb. 그것은 많은 것이 문제에 대해 완전한 프레임 워크를 제공하기 위해 OpenCoweb-jsoe를 활용합니다.
- OT.js는 ShareJ의 작업 유형을 기반으로합니다.
- DriveSDK. 많은 일을 할 수있는 매우 흥미로운 API (예 : 그래프 협업).
- SwellRT는 Apache Wave의 포크입니다. 페더레이션되고 서식있는 텍스트를 지원합니다.
차동 동기화 :
- Neil Fraser의 Diff-Match-Patch.
- MobWrite는 Diff-Match-Patch 알고리즘을 활용합니다.
-
- 공유 유형의 구현을 허용하는 다양한 CRDT 알고리즘이 있습니다. 일부 CRDT는 P2P 메시지 전파와 함께 작동하고 일부는 클라이언트-서버 모델에 의존합니다.
- Yjs를 사용하면 임의의 데이터 유형 (RichText, Array, Hash Maps, .. 확장 가능)을 공유 할 수 있습니다. P2P 통신 프로토콜에 대한 오프라인 지원 및 지원 (XMPP, Websockets 및 WebRTC 용 모듈이 있음)
- 오프라인을 지원하는 SwarmJS 클라이언트 서버 공유 데이터베이스. React와 잘 작동합니다.
- Woot Woot CRDT의 구현
- CRDT 또 다른 CRDT 구현
- 자동 병합
OT 라이브러리 :
HWIOS 웹 소켓 프로젝트 내에서 문서 상태를 동기화하기 위해 두 가지 (서버 측의 py-infinote, 클라이언트 측의 jinfinote)의 콤보를 사용했습니다.
ot.js 라이브러리 https://github.com/Operational-Transformation/ot.js 는 다중 사용자 시나리오에서 유용 할 수 있습니다.
https://github.com/opencoweb/coweb
이 문제에 대한 턴키 또는 "드래그 앤 드롭"솔루션은 공유 가변 상태를 안정적으로 동기화하는 것으로 인해 실제로 존재하지 않습니다. dmonad의 답변은 괜찮은 편이며 여기에 사용 가능한 솔루션에 대한 최신 개요를 게시했습니다 .
이 질문은 꽤 오래 전에 Convergence (면책 조항 : 저는 설립자입니다)는 데이터 동기화 협업 UX 구축에 유용한 다른 API 호스트를 제공하는 가장 턴키 솔루션을 제공합니다. 다음은 요청한 내용을 정확히 예 입니다. 여러 클라이언트에서 텍스트 필드 동기화.
그렇지 않으면 ShareDB 는 많은 사람들의 요구에 맞는 훌륭한 오픈 소스 솔루션입니다 .
다음 자바 스크립트 라이브러리도 확인하십시오.
- https://github.com/vitotafuni/JSOTTEST <클라이언트 측 자바 펼쳐보기 구현
- https://github.com/fitzgen/operational-transformation-example <노드 JS 클라이언트 / 서버 구현
js 클라이언트 라이브러리 (Strophe.js)를 사용하면 무료 XMPP 서버 (예 : jabber.org)와 클라이언트 측 OT 라이브러리 (JSOTTEST)를 사용하여 완전한 클라이언트-서버 시스템을 구축 할 수 있습니다.
코드를 클라이언트-서버 채팅 시스템의 src를 출시하겠습니다.
Npm에는 node.js에 대한 멋진 ot 라이브러리가 있습니다.
- https://npmjs.org/package/ot- 클라이언트 및 서버 구현 또는 내장 된 codemirr 및 ace 용 어댑터
- https://npmjs.org/package/changesets- 노드 및 브라우저에서 사용 가능한 일반 ot 라이브러리 전송하고 서로에 대해 변형하고 문서에 적용 할 수있는 '변경 집합'(본질적으로 diff)을 만들 수 있습니다.
Cedanet 에있는 사람들과 이야기 할 수 있습니다. Ceda는 비공개 소스이며 웹 사이트에서 무료 평가판을 사용할 수 없습니다. 저는 Ceda의 개발에 참여하고 상업 프로젝트에서 계속해서 작업하고 있습니다. 따라서이 길로 가면 피드백 / 조언을 제공 할 수있을 것입니다.
나는 etherpad lite를 사용하는 etherpad.org가 다른 솔루션보다 우수합니다.
우리는 Operational Transformation과 관리를 결합한 협업 편집기를 구축하고 있습니다. 이렇게하면 오프라인 및 온라인 공동 작업을 모두 지원할 수 있습니다. 어제 오픈 소스 스택의 일부로 자체 OT 라이브러리를 출시했습니다.
http://interior.substance.io/modules/operator.html
버전 관리를위한 라이브러리도 제공했습니다.
http://interior.substance.io/modules/chronicle.html
OT 제어 계층을 구현하는 작은 unixy (한 가지를 수행하고 잘 수행) 라이브러리를 작성하여 다양한 OT 유형을 연결할 수 있습니다 (모든 shareJS 호환 유형 지원). shareJS와 비슷하지만 덜 독단적이고 추상적입니다.
https://github.com/marcelklehr/gulf
참고 URL : https://stackoverflow.com/questions/2043165/operational-transformation-library
'IT' 카테고리의 다른 글
코드 우선 : 독립 연결 vs. 외래 키 연결? (0) | 2020.08.19 |
---|---|
최상위 수준에서 async / await를 어떻게 사용할 수 있습니까? (0) | 2020.08.19 |
isset () 및 empty ()-사용할 사항 (0) | 2020.08.19 |
'is'대 null 검사로 시도 캐스트 (0) | 2020.08.19 |
대체 바이너리 파일에 쓰는 방법? (0) | 2020.08.19 |