リアルタイム共同編集
OT、HTTP、WebSocket、永続化を組み合わせて同じ内容を共同編集します。
ユーザーと接続済み Agent が同じ文書を操作します。編集はローカルへ即時反映され、サーバーが順序を確定して配信し、応答性と最終的な一貫性を両立します。
同時編集と競合
Univer は OT(操作変換)を使います。クライアントは変更を changeset にまとめ、サーバーは確定 revision に基づき変換・送信します。Alice が C2 を編集中に Bob が B 列前へ列を追加すると、対象セルは D2 へ移ります。元に戻す・やり直しも遠隔操作に合わせますが、業務上の競合をすべて解消するわけではありません。
変換・適用できない場合は競合状態になり、対象文書の編集を停止します。CollaborationConflict は原因と未確認のローカル変更を渡します。再読み込み前にデータを保存してください。競合復旧と OT 設計を参照してください。
通信と再接続
| 経路 | 役割 |
|---|---|
| HTTP | スナップショット・差分取得、Session Ticket 取得、changeset 送信。 |
| WebSocket | Session・Room 維持、ACK、遠隔変更、Presence 受信。 |
一度限りの Ticket で接続し、文書 Room に参加します。Presence はメンバー、カーソル、選択を共有します。接続中や HTTP 成功だけでは保存確認になりません。 ACK、共同編集状態、未確認変更から保存状態を示します。
切断時は未確認変更を保持し、再接続後に不足 revision を取得して再送します。サーバーは送信 ID で重複を除きます。同期状態と Presenceを参照してください。
永続化とスナップショット
確定 changeset と revision を保存し、方針に従ってスナップショットを生成します。読み込みはスナップショットと以降の変更から復元し、毎回の編集で生成する必要はありません。計算は Headless とサーバー計算、履歴・コメント・Worktree は拡張を参照してください。
配置構成
- 単一ノード:Node.js に Transport、Endpoint、Service、DB Adapter を組み込みます。Memory は一時検証、SQLite はローカルや小規模向けです。他 DB は独自アダプターを用意します。
- 拡張:共有永続化だけでなく、ノード間配信、Presence、Ticket 検証、保存の一貫性も必要です。プロセス追加だけでは実現しません。使用版の配置設計に従います。
- 重い処理の分離:変換など CPU 負荷の高い処理を別配置します。
性能と容量
現行版のベンチマークと容量データは未掲載です。 文書サイズ、編集頻度、人数、環境に依存します。ACK 時間、遠隔表示遅延、毎秒 changeset、配信量、使用メモリーを測定してください。
導入と対象
概要と二つのブラウザーの例から開始します。Middleware で認証・認可し、永続 DB Adapter を選んで再起動後も内容が残ることを確認します。
コアは Sheet、Doc、Slide、Canvases、Relational Table を対象とし、PDF は含みません。認証、認可、ファイル管理、保存方針はアプリケーションが提供します。
このガイドはいかがですか?