IT

운영 변환 라이브러리?

lottoking 2020. 8. 19. 18:54
반응형

운영 변환 라이브러리?


여러 사용자 (Google Docs)간에 실시간으로 텍스트를 동기화 할 수있는 라이브러리를 찾고 있습니다.

나는 내 요구에 맞는 것처럼 보이는 Operational Transformation을 우연히 발견했습니다. 그렇게 말하면서 나는 OT의 요지를 이해하지만 OT의 수학이나 구현은 이해하지 못합니다.

따라서 텍스트 영역에 연결하여 변환을 생성 한 다음 해당 변환을 다른 클라이언트에 적용 할 수있는 드래그 앤 드롭 Javascript 라이브러리가 있는지 궁금합니다.

(저는 Etherpad 소스를 얻었지만 머리와 꼬리를 만들 수 없습니다. 누군가 Etherpad의 OT 구현을 활용하는 방법을 지적 할 수있는 그것도 좋을 것입니다!)


저는 Google Wave의 OT 구현의 일부가 오픈 소스라고 생각합니다 (더 많은 부분이 제공 될 예정입니다).

확실하지 않지만 OT의 대안은 확실하지 않습니다 .


전 웨이브 엔지니어 중 하나는 지금은 이름의 공동 편집 알고리즘이라는 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 알고리즘이 있습니다. 일부 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 는 많은 사람들의 요구에 맞는 훌륭한 오픈 소스 솔루션입니다 .


다음 자바 스크립트 라이브러리도 확인하십시오.


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

반응형