Какой сервер для оперативных операций преобразования?
Я надеюсь использовать алгоритмы Diff-Match-Patch, доступные от google, в дополнение к протоколу совместного текстового редактора Google-Mobwrite в реальном времени, чтобы встроить совместимый текстовый редактор в реальном времени в мою программу.
В любом случае мне было интересно, что именно может быть наиболее эффективным способом хранения "глобальных" копий каждого документа, который редактируют пользователи. Я хотел бы, чтобы каждый документ хранился на сервере, который не является локальным для какого-либо пользователя, и каждый раз, когда пользователь выполняет "операцию" (удаление вставки, вставку, вырезание), вычисление различий между его копией и сервером, его исправлением и т. Д.... если вы знаете протокол Google mobwrite, вы, вероятно, понимаете, о чем я говорю.
Должны ли серверные текстовые файлы храниться в виде измененного файла или в базе данных sql в виде длинной строки или как? Должен ли я использовать веб-сокеты для связи с сервером? Я, честно говоря, любитель, когда дело доходит до этого, но, как правило, быстро учусь. У кого-нибудь есть какие-либо советы или ресурсы, которым я мог бы следовать? Большое спасибо
2 ответа
Это будет большой проект с нуля, поэтому я предлагаю вам использовать один из многих проектов с открытым исходным кодом в этой области. Например, etherPad:
Mobwrite использует технику дифференциальной синхронизации и полностью отличается от техники операционного преобразования.
Дифференциальная синхронизация предполагает наличие круга общения, который всегда начинается с клиента (браузера), что означает, что вы не можете использовать веб-сокеты для прямой отправки различий с сервера. Браузер должен часто запрашивать у сервера обновления (скажем, каждые 2 секунды), иначе ваши теневые копии будут не синхронизированы.
Для хранения ваших теневых копий, когда пользователь активен, вы можете использовать все, что захотите, но лучше использовать БД в памяти (Redis), так как вам нужен быстрый доступ для выполнения различий и исправлений. А когда пользователь покидает сеанс, вам больше не нужна его копия. Но, если вам нужно постоянство в вашем приложении, вы должны сохранять только серверную копию, а не теневую (теневые копии используются для поиска различий), тогда вы можете использовать MySQL или что угодно.
Но для техники Оперативного Преобразования есть несколько хороших библиотек.
NodeJS:
- ShareJS (sharejs.org): поддерживает все операции для JSON.
- RacerJS: модель синхронизации, построенная на основе ShareJS
- DerbyJS: Полная структура, использующая RacerJS в качестве модели.
OpenCoweb (opencoweb.org): сервер является Java или Python, клиент построен с Dojo