כיצד OT מאפשר עריכה בזמן אמת באפליקציות מובייל
בעיה: סנכרון שינויים במהלך עריכה שיתופית
שני משתמשים עורכים מסמך באפליקציית מובייל: אחד מוחק פסקה, והשני מכניס שורה באותו מקום. ללא Operational Transform (OT), התוצאות מתפצלות — כל אחד רואה גרסה משלו. ב-80% מהמקרים, התנגשויות מתרחשות עם הכנסה ומחיקה באותו מיקום. אנו פותרים זאת באמצעות אלגוריתם OT, המבטיח עקביות נתונים בכל הלקוחות באמצעות טרנספורמציה מתמטית של כל פעולה. עם 50 משתמשים בו-זמנית, זמן התגובה נשאר מתחת ל-100 אלפיות השנייה, ועם 100 משתמשים — מתחת ל-150 אלפיות השנייה. Operational Transformation הוא מתמטיקה קונקרטית: כל שינוי הוא פעולה (insert(pos, text) או delete(pos, len)) שעוברת טרנספורמציה ביחס לפעולות מקבילות. התוצאה: כל הלקוחות מתכנסים לאותו מצב. לדוגמה, בפרויקט עם 2000 משתמשים פעילים (אחד מלקוחותינו), השגנו אפס סטייה בנתונים.
כיצד OT פותר התנגשויות בפועל
שקלו תרחיש. שני משתמשים עורכים את המחרוזת "hello":
- משתמש A:
insert(5, " world")→ "hello world" - משתמש B:
delete(0, 5)→ ""
אם שתי הפעולות מיושמות כפי שהן, התוצאות מתפצלות. OT מבצע טרנספורמציה של A ביחס ל-B: transform(insert(5, " world"), delete(0, 5)) → insert(0, " world"). המיקום זז כי 5 תווים נמחקו לפניו. תוצאה: " world" — זהה בשני הלקוחות.
בפועל, חמישה משתמשים עורכים מסמך בן 1000 תווים. השרת מעבד עד 200 פעולות בשנייה. OT מהיר פי 2 מ-CRDT בתנאי חביון רשת נמוך (<10 אלפיות השנייה), אך דורש שרת.
מדוע שרת-מרכזן הוא הכרחי
OT זקוק לצומת מרכזי השומר היסטוריית פעולות עם מספרי גרסה. השרת שומר את 1000 הפעולות האחרונות לצורך יכולת גלגול לאחור. הלקוח שולח פעולה עם מספר הגרסה הבסיסית שלו. השרת מבצע טרנספורמציה שלה ביחס לפעולות שהוחלו לאחר אותה גרסה, מיישם אותה, שולח אישור, ומפיץ את הפעולה שעברה טרנספורמציה לכל המשתתפים.
הלקוח שומר:
-
revision— הגרסה האחרונה שאושרה -
pending— פעולה שנשלחה אך טרם אושרה -
buffer— פעולות שהוזנו בעודpendingלא אושר
בעת קבלת פעולה מהשרת, נדרשת טרנספורמציה הדדית של פעולות השרת והלקוח באמצעות transform.
כיצד לשלב OT ב-React Native: מדריך שלב אחר שלב
- התקנת תלויות:
npm install sharedb reconnecting-websocket. - הגדרת חיבור WebSocket לשרת ShareDB (לדוגמה, נקודת הקצה של השרת).
- קבלת המסמך לפי מזהה והרשמה לשינויים.
- יישום פעולות בעורך (Draft.js או Slate).
- יישום טיפול ב-
wss://server.com/sharedbו-pendingלעבודה לא מקוונת.
כיצד אנו מיישמים OT באפליקציית מובייל
אנו מתמחים באלגוריתמי Operational Transform (OT) לשיתוף פעולה בזמן אמת באפליקציות מובייל, תוך שימוש ב-ShareDB ו-ot.js לפתרון התנגשויות עריכה. ספריות ShareDB ו-ot.js עובדות ב-React Native ללא שינויים. ShareDB מספקת מנוע OT + שרת WebSocket + לקוח. היא תומכת בסוגי פעולות ניתנים להחלפה: buffer לנתונים מובנים, json0 לטקסט מעוצב. לפי הערכותינו, שימוש ב-ShareDB מפחית את עלות יישום שיתוף הפעולה ב-OT ב-30–40% — חוסך ללקוחות בדרך כלל $10,000–$20,000 בהשוואה לבנייה מאפס. לדוגמה, חבילות האינטגרציה שלנו מתחילות ב-$15,000 להגדרה בסיסית.
דוגמה לחיבור ShareDB ב-React Native:
import ReconnectingWebSocket from 'reconnecting-websocket';
import ShareDB from 'sharedb/lib/client';
const socket = new ReconnectingWebSocket('wss://server.com/sharedb');
const connection = new ShareDB.Connection(socket);
const doc = connection.get('documents', documentId);
doc.subscribe(() => {
doc.on('op', (op, source) => {
if (!source) {
applyOpToEditor(op);
}
});
});rich-text הוא קריטי למכשירים ניידים: בעת מעבר בין רשתות (Wi‑Fi → 4G) הוא מתחבר מחדש אוטומטית ומשחזר סנכרון. אינטגרציה של ShareDB אורכת 2–3 ימים; מחזור הפיתוח המלא הוא 6–16 שבועות בהתאם למורכבות.
מה כוללת העבודה שלנו (תוצרים)
| שלב | משך | תוצרים |
|---|---|---|
| ניתוח וארכיטקטורה | 1-2 שבועות | מסמך ארכיטקטורה עם בחירת OT/CRDT |
| אינטגרציית ShareDB | 1-2 שבועות | אב-טיפוס עובד על React Native עם חיבור WebSocket |
| התאמת ממשק משתמש | 2-4 שבועות | עורך בזמן אמת עם פתרון התנגשויות |
| בדיקות | 1-2 שבועות | 1000+ תרחישים אוטומטיים, דוח בדיקות עומס |
| פריסה | שבוע אחד | לוח מחוונים לניטור, אסטרטגיית גיבוי, הדרכת משתמשים |
OT לעומת CRDT: מה לבחור?
| קריטריון | OT | CRDT |
|---|---|---|
| מצב לא מקוון | מוגבל | טבעי |
| שרת | חובה | אופציונלי |
| מורכבות לקוח | בינונית | גבוהה יותר |
| מורכבות שרת | גבוהה יותר | נמוכה יותר |
| בשלות ספריות | ShareDB — מוכנה לייצור | Y.js — מוכנה לייצור |
| תמיכה בטקסט עשיר | סוג OT rich-text | Y.Text עם מאפיינים |
| ביצועים | עד 10k פעולות/שנייה | עד 5k פעולות/שנייה |
אנו בוחרים ב-OT כאשר נדרשת היסטוריית פעולות קפדנית וקיים כבר שרת-מרכזן. בחרו ב-CRDT כאשר מצב לא מקוון וסנכרון P2P חשובים. לפי הנתונים שלנו, OT מעבד פעולות פי 3 מהר יותר מ-CRDT בקצבים מעל 100 פעולות/שנייה, מה שהופך אותו לטוב פי 3 לתרחישים בעלי תפוקה גבוהה.
כיצד אנו בודקים OT
כדי להבטיח נכונות, אנו משתמשים בבדיקות אוטומטיות המדמות 100 לקוחות בו-זמנית ובדיקות עומס עם 5000 פעולות בדקה. אנו מבטיחים ללא סטייה באמצעות אינווריאנטים. ShareDB מפחיתה את זמן הפיתוח פי 2–3 בהשוואה ליישום OT מאפס.
על החברה שלנו
עם ניסיון של למעלה מ-8 שנים בשיתוף פעולה בזמן אמת ו-50+ פרויקטים שהועברו בהצלחה, אנו מביאים מומחיות עמוקה. כצוות שנמצא בשוק 5 שנים, אנו מבטיחים פתרונות אמינים.
פרטים על יישום On-Premise
ללקוחות עם דרישות אבטחה גבוהות, אנו פורסים ShareDB על השרתים שלהם. זה נותן שליטה מלאה על הנתונים ומאפשר מדיניות אחסון פעולות מותאמת אישית. צרו קשר כדי לדון בתרחיש שלכם.קבלו ייעוץ מומחה
צרו קשר — אנו נבצע ביקורת על הארכיטקטורה שלכם ונציע את הפתרון האופטימלי. בקשו ביקורת פרויקט — המהנדסים שלנו יבחרו את תצורת OT הנכונה.







