Совместное редактирование
Координируйте параллельные изменения через OT, HTTP, WebSocket и постоянное хранение.
Пользователи и подключённые агенты работают с одним документом. Изменения сначала применяются локально, затем сервер подтверждает порядок и рассылает их, сочетая быстрый отклик с итоговой согласованностью.
Параллельная работа и конфликты
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 и повторите отправку. Сервер устраняет дубликаты по идентификатору отправки. См. синхронизацию и Presence.
Хранение и снимки
Сервис хранит подтверждённые changeset и revision, создавая снимки по политике. Загрузка восстанавливает снимок и последующие изменения; создавать снимок после каждого ввода не требуется. Расчёт описан в Headless и серверных вычислениях. История, комментарии и Worktree — отдельные расширения.
Развёртывание
- Один узел: соберите Transport, Endpoint, Service и Database Adapter в Node.js. Memory подходит для временной проверки, SQLite — для локальной и небольшой нагрузки. Другие БД подключаются адаптерами приложения.
- Масштабирование: кроме общего хранилища нужны межузловая рассылка, Presence, проверка Ticket и согласованность записи. Одних дополнительных процессов недостаточно; следуйте схеме своей версии.
- Тяжёлые задачи: вынесите ресурсоёмкое преобразование файлов отдельно.
См. модули, развёртывание и пример нескольких узлов.
Производительность и ёмкость
Тесты и показатели текущей версии ещё не опубликованы. Они зависят от документов, частоты, участников и среды. Измеряйте подтверждение отправки, удалённое отображение, changeset в секунду, объём рассылки и память.
Подключение и охват
Начните с обзора и примера двух браузеров. Подключите идентификацию и права через Middleware, выберите постоянный Database Adapter и проверьте сохранение после перезапуска.
Ядро поддерживает Sheet, Doc, Slide, Canvases и Relational Table, не PDF. Идентификацию, авторизацию, файлы и политику хранения обеспечивает приложение.
Насколько полезно это руководство?