Обзор пакетов
Публичные пакеты Collaboration SDK для Core, History, Thread Comment, Worktree, File и Office Exchange.
Это карта выбора пакетов. Сначала соберите Core Collaboration, затем добавьте нужные расширения. Все пакеты устанавливать не нужно.
Серверные пакеты Database Adapter, File и Office Exchange открыты под лицензией Apache-2.0; исходный код находится в univer-collaboration-sdk-community. У них тот же префикс и та же версия, что у остальных пакетов, и устанавливаются они так же.
Core Collaboration
Core Collaboration предоставляет основной путь браузерной совместной работы, серверного протокола, OT, ревизий и хранения.
| Среда | Пакет | Основная ответственность |
|---|---|---|
| Браузер | @univerjs-pro/collaboration | Регистрирует базовые браузерные возможности |
| Браузер | @univerjs-pro/collaboration-client | Загрузка Units, отправка изменений и синхронизация |
| Браузер | @univerjs-pro/collaboration-client-ui | Предоставляет UI состояния и стили |
| Server | @univerjs-pro/collaboration-transport-node | Принимает HTTP и WebSocket Node.js |
| Server | @univerjs-pro/collaboration-endpoint | Реализует протокол Client, Sessions, Rooms и Presence |
| Server | @univerjs-pro/collaboration-service | Управляет Units, OT, ревизиями и API ядра |
| База данных | @univerjs-pro/collaboration-database-memory | Хранение в процессе для тестов, примеров и временной разработки |
| База данных | @univerjs-pro/collaboration-database-sqlite | SQLite для разработки, тестов, локальных и небольших установок |
| База данных | @univerjs-pro/collaboration-database-postgres | Хранение в PostgreSQL, общее для нескольких узлов |
| Multi-node | @univerjs-pro/collaboration-cluster-redis | Pub/sub-адаптер и хранилище session tickets на Redis для развёртывания на нескольких узлах |
Core Server нужны Transport, Endpoint, Service и один Database Adapter. Memory, SQLite и PostgreSQL реализуют один контракт; обычно выбирают один. Для развёртывания на нескольких узлах также нужны pub/sub-адаптер и общее хранилище session tickets. Оба контракта (IPubSubAdapter, ISessionTicketStore) определяет Endpoint; SDK предоставляет реализацию на Redis.
History
History строит индекс версий по событиям создания Unit и фиксации изменений Core.
| Среда | Пакет | Основная ответственность |
|---|---|---|
| Браузер | Повторно использует Core Client/UI | Показывает и читает историю |
| Server | @univerjs-pro/collaboration-history-service | Строит и запрашивает индекс истории |
| Server | @univerjs-pro/collaboration-history-endpoint | Предоставляет Client протокол History |
| База данных | @univerjs-pro/collaboration-history-database-memory | Хранение индекса History в памяти процесса |
| База данных | @univerjs-pro/collaboration-history-database-sqlite | Хранит производный индекс History |
История — восстанавливаемый производный индекс. Наборы изменений Core остаются источником истины содержимого.
Thread Comment
Thread Comment управляет текстами, ответами и статусом решения комментариев Sheets и Docs.
| Среда | Пакет | Основная ответственность |
|---|---|---|
| Браузер | Использует пакеты Core Collaboration | Использует Comment Client и UI |
| Server | @univerjs-pro/collaboration-comment-service | Управляет комментариями и событием commentCommitted |
| Server | @univerjs-pro/collaboration-comment-endpoint | Предоставляет протокол и публикует обновления через Unit Rooms |
| База данных | @univerjs-pro/collaboration-comment-database-memory | Хранение комментариев в процессе |
| База данных | @univerjs-pro/collaboration-comment-database-sqlite | Хранение комментариев в SQLite |
Comment Adapter хранит комментарии. Движущиеся с содержимым якоря остаются в снимках и изменениях Core.
Worktree
Worktree предоставляет изолированные черновики, переходы статуса и слияние по Unit.
| Среда | Пакет | Основная ответственность |
|---|---|---|
| Браузер | @univerjs-pro/collaboration-worktree-client | Подключает черновики, статус и слияние Worktree |
| Server | @univerjs-pro/collaboration-worktree-service | Управляет изменениями черновиков, статусом и слиянием |
| Server | @univerjs-pro/collaboration-worktree-endpoint | Предоставляет протокол Worktree Client |
| База данных | @univerjs-pro/collaboration-worktree-database-memory | Хранение Worktree в процессе |
| База данных | @univerjs-pro/collaboration-worktree-database-sqlite | Хранение Worktree в SQLite |
Worktree Service сливает в trunk через Core Service, поэтому Middleware нужны на обеих границах.
File
File хранит бинарные файлы, которые загружают клиенты Univer: изображения и вложения, вставленные в Unit, а также исходные и результирующие файлы импорта и экспорта. В данных Unit записывается только ID файла.
| Среда | Пакет | Основная ответственность |
|---|---|---|
| Браузер | Повторно использует Core Collaboration Client | Загружает изображения и вложения и преобразует ID файлов в URL |
| Server | @univerjs-pro/collaboration-file-service | Применяет правила владения, Middleware и очистку временных файлов |
| Server | @univerjs-pro/collaboration-file-endpoint | Предоставляет маршруты загрузки, sign-url и скачивания |
| База данных | @univerjs-pro/collaboration-file-memory | Хранение метаданных и содержимого в памяти процесса |
| База данных | @univerjs-pro/collaboration-file-database-sqlite | Хранение метаданных файлов в SQLite |
| База данных | @univerjs-pro/collaboration-file-database-postgres | Хранение метаданных файлов в PostgreSQL |
| Хранилище | @univerjs-pro/collaboration-file-blob-local | Хранит содержимое в локальном каталоге |
| Хранилище | @univerjs-pro/collaboration-file-blob-s3 | Хранит содержимое в S3-совместимом объектном хранилище с подписанными прямыми ссылками |
Метаданные и содержимое — два независимых контракта, поэтому каждый может следовать существующему хранилищу приложения, например метаданные в базе данных, а содержимое в объектном хранилище.
Office Exchange
Office Exchange импортирует файлы Office как совместные Units и экспортирует Units в файлы. Исходные и результирующие файлы хранит File.
| Среда | Пакет | Основная ответственность |
|---|---|---|
| Браузер | @univerjs-pro/exchange-client | Базовые браузерные возможности обмена файлами |
| Браузер | @univerjs-pro/sheets-exchange-client | Импорт и экспорт Sheet |
| Server | @univerjs-pro/collaboration-exchange-service | Управляет task импорта и экспорта, Middleware, созданием и чтением Units |
| Server | @univerjs-pro/collaboration-exchange-endpoint | Предоставляет маршруты импорта, экспорта и task |
| Server | @univerjs-pro/exchange-node | Преобразование Office и данных Univer в Node.js |
Exchange Service создаёт и читает Units через Core Service, а файлы читает и записывает через File Service, поэтому собирается вместе с Core и File.
Правила выбора
- Начните с пакетов Core из Быстрого старта.
- Выберите один Core Database Adapter: Memory, SQLite, PostgreSQL или собственный.
- Для развёртывания на нескольких узлах добавьте pub/sub-адаптер и хранилище session tickets на Redis.
- Установите только нужные расширения.
- Для изображений, вложений или импорта и экспорта сначала соберите File, затем при необходимости добавьте Office Exchange.
- Создайте отдельный Adapter для каждого модуля даже при общей базе данных.
Связи описаны в Модулях расширений, запускаемые сборки — в Примерах.
Насколько полезно это руководство?