Thư viện chuyển đổi hoạt động?


102

Tôi đang tìm một thư viện cho phép tôi đồng bộ hóa văn bản trong thời gian thực giữa nhiều người dùng (ala Google Documents).

Tôi đã vấp phải Chuyển đổi hoạt động, có vẻ như phù hợp với nhu cầu của tôi. Nói như vậy, tôi hiểu ý chính của OT, nhưng không phải toán học cũng như cách triển khai của OT.

Vì vậy, tôi đã tự hỏi liệu có một thư viện Javascript drag'n'drop có thể kết nối vào một vùng văn bản, tạo ra các chuyển đổi, sau đó cho phép tôi áp dụng các biến đổi đó lên một ứng dụng khách khác không?

(Tôi đã nhận được nguồn Etherpad, nhưng tôi không thể bắt đầu hoặc tìm hiểu nó. Nếu ai đó có thể chỉ ra cách tận dụng việc triển khai OT của Etherpad, điều đó cũng sẽ rất tuyệt!)


Soạn thảo văn bản hợp tác cung cấp bởi căn cứ hỏa lực gọi Firepad - firepad.io Kiểm tra mã để có được một số cảm hứng github.com/FirebaseExtended/firepad
Tharanga Hewavithana

Câu trả lời:


57

Tôi nghĩ rằng các phần triển khai OT của Google Wave là Mã nguồn mở (và nhiều phần khác sắp ra mắt).

Tôi không chắc đây có phải là những gì bạn đang tìm kiếm hay không, nhưng một giải pháp thay thế cho OT là Đồng bộ hóa vi sai :


6
Diff-Match-Patch, kết hợp với bài báo Đồng bộ hóa Khác biệt của Neil Frasier ( neil.fraser.name/writing/sync ) đã thực hiện được mẹo! Rất cám ơn vì đã chỉ cho tôi đi đúng hướng.
game thủ 2000

Theo những gì tôi hiểu, Diff-Match-Patch và theo phần mở rộng, MobWrite (vì cái sau sử dụng cái trước) chỉ hỗ trợ văn bản chứ không phải các thay đổi nhị phân. Tuy nhiên, có một bản demo về sự cộng tác với các phần tử biểu mẫu HTML, điều này cho thấy nó không chỉ hỗ trợ văn bản thuần túy.
game thủ 2000

Bất kỳ tin tốt nào về "và nhiều phần khác sẽ đến" kể từ câu trả lời này?
bertie

3
Trên thực tế, Google-Diff-Match-Patch nhằm mục đích triển khai phương pháp thay thế cho Chuyển đổi hoạt động, đó là Đồng bộ hóa khác biệt, để hiểu sự khác biệt, bạn có thể đọc tài liệu Neil Fraser của DS: neil.fraser.name/writing/sync (OT được tham chiếu trong tài liệu này là Sự kiện đi qua). Chúng là hai phương pháp rất khác nhau.
Benja

5
cái này đã cũ, nhưng trong trường hợp bạn nhớ, tôi đã cung cấp nguồn tài nguyên mở github.com/benjamine/JsonDiffPatch nó sử dụng Neil's Diff-Match-Patch cho các chuỗi dài, nhưng nó hoạt động với đồ thị đối tượng js arbritrary
Benja

44

Một trong những kỹ sư cũ của Wave đã phát hành bản triển khai Coffeescript của thuật toán chỉnh sửa cộng tác được gọi là ShareJS, hiện được đặt tên là ShareDB .


1
ShareJS có lẽ đơn giản hơn và được ghi lại tốt hơn và có thể tái sử dụng nhiều hơn những gì MobWrite làm với Diff và Patch của Google.
Luke Stanley

33

Tôi sẽ tóm tắt các giải pháp tôi đã tìm thấy.

  • Chuyển đổi hoạt động: Ví dụ:

    • Google Wave OT. Cách tiếp cận dựa trên cái gọi là cách tiếp cận Sao Mộc.
    • ShareJs. Dựa trên thuật toán OT tương tự như Google Wave OT.
    • Coweb-jsoe. Dựa trên COT - một cách tiếp cận OT rất phức tạp cũng hỗ trợ truyền thông điệp p2p.
    • OpenCoweb. Nó tận dụng OpenCoweb-jsoe để cung cấp một Khung chính thức cho rất nhiều vấn đề tương tự.
    • OT.js dựa trên kiểu hoạt động của ShareJs.
    • Ổ đĩa SDK. Một API rất thú vị có thể làm được nhiều thứ - ví dụ như cộng tác trên đồ thị.
    • SwellRT là một Fork của Apache Wave. Là được liên kết và hỗ trợ văn bản đa dạng thức.
  • Đồng bộ hóa vi sai:

    • Khác biệt-Khớp-Patch từ Neil Fraser.
    • MobWrite tận dụng thuật toán Diff-Match-Patch.
  • CRDT (Kiểu dữ liệu được sao chép giao hoán):

    • Có rất nhiều thuật toán CRDT khác nhau cho phép thực hiện các kiểu chia sẻ. Một số CRDT hoạt động với việc truyền thông điệp P2P, một số dựa trên mô hình máy khách-máy chủ
    • Yjs cho phép bạn chia sẻ các kiểu dữ liệu tùy ý (RichText, Array, Hash Maps, .. có thể mở rộng). Hỗ trợ ngoại tuyến và hỗ trợ cho các giao thức truyền thông P2P (có các mô-đun cho XMPP, Websockets và WebRTC)
    • SwarmJS Máy chủ khách hàng chia sẻ cơ sở dữ liệu với hỗ trợ ngoại tuyến. Hoạt động tốt với React
    • Woot Việc triển khai Woot CRDT
    • CRDT Triển khai CRDT khác
    • Tự động hóa

API Google Drive sử dụng OT không phải DS. developers.google.com/drive/realtime/conflict-resolution
Mathias Bak




4

Các giải pháp chìa khóa trao tay hay "kéo và thả" cho vấn đề này chưa thực sự tồn tại do sự phức tạp của việc đồng bộ hóa trạng thái có thể thay đổi được chia sẻ một cách đáng tin cậy. Phản hồi của dmonad là một bản tổng hợp khá tốt và tôi đã đăng tổng quan cập nhật hơn về các giải pháp có sẵn tại đây .

Câu hỏi này khá cũ, nhưng Hội tụ (tuyên bố từ chối trách nhiệm: Tôi là người sáng lập) cung cấp giải pháp chìa khóa trao tay nhất hiện có, cung cấp không chỉ đồng bộ hóa dữ liệu mà còn cung cấp một loạt các API khác hữu ích để xây dựng một UX hợp tác. Đây là một ví dụ hiển thị chính xác những gì bạn yêu cầu: đồng bộ hóa trường văn bản trên nhiều máy khách.

Mặt khác, ShareDB là một giải pháp mã nguồn mở tuyệt vời phù hợp với nhiều nhu cầu của mọi người.



2

Với lib client js (Strophe.js), bạn có thể sử dụng một máy chủ XMPP miễn phí (như jabber.org) cùng với lib OT phía client của tôi (JSOTTEST) để xây dựng một hệ thống client-server hoàn chỉnh.

Tôi sẽ gửi src của hệ thống trò chuyện máy khách-máy chủ demo khi tôi có thời gian để sửa lại mã.


1
Gần hai năm trước, bạn viết "Tôi sẽ gửi src của một bản demo ...". Bạn đã bao giờ hoàn thành bản demo đó chưa?
Bryan Oakley

Xin lỗi ... nhưng tôi không có thời gian để phát hành bản demo công khai! Tuy nhiên nó rất đơn giản bằng cách sử dụng Bosh lib cho php !! tạm biệt
user981836

2

Npm có một số thư viện ot đẹp cho node.js:

  • https://npmjs.org/package/ot - bộ điều hợp cho codemirror và ace được tích hợp sẵn cũng như triển khai máy khách và máy chủ
  • https://npmjs.org/package/changesets - thư viện đơn giản có thể sử dụng được trong nút và trình duyệt; cho phép bạn xây dựng các 'tập hợp thay đổi' (về cơ bản là khác biệt) mà bạn có thể gửi xung quanh, biến đổi lẫn nhau và áp dụng trên tài liệu

1

Bạn có thể nói chuyện với những người ở Cedanet . Mặc dù Ceda là mã nguồn đóng và không có bản dùng thử miễn phí nào trên trang web của họ. Tôi đã tham gia vào sự phát triển của Ceda và tiếp tục làm việc với nó trong các dự án thương mại, vì vậy tôi có thể đưa ra một số phản hồi / lời khuyên nếu bạn đi theo con đường này.


1

Tôi thấy etherpad.org với etherpad lite ưu việt hơn các giải pháp khác.


1
Bạn có thể chứng minh tính ưu việt của etherpad bằng một số ví dụ không?
DL Narasimhan

1

Chúng tôi đang xây dựng một trình soạn thảo cộng tác kết hợp Chuyển đổi hoạt động với lập phiên bản. Bằng cách đó, chúng tôi có thể hỗ trợ cả cộng tác ngoại tuyến và trực tuyến. Chúng tôi đã phát hành thư viện OT của riêng mình vào ngày hôm qua như một phần của ngăn xếp nguồn mở của chúng tôi.

http://interior.substance.io/modules/operator.html

Chúng tôi cũng đã đóng góp một thư viện để lập phiên bản.

http://interior.substance.io/modules/chronicle.html


1

Tôi đã viết một thư viện unixy nhỏ (làm một việc và làm tốt điều đó) thực hiện một lớp điều khiển OT, cho phép bạn cắm các loại OT khác nhau (hỗ trợ tất cả các loại tuân thủ shareJS). Nó tương tự như shareJS nhưng ít cố kiến ​​hơn và trừu tượng hơn.

https://github.com/marcelklehr/gulf

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.