Операционная трансформация в Meteor.js?
Поддерживает ли Meteor.js операционную трансформацию?
Я работаю над проектом, который связан с Etherpad, для которого я думал использовать Meteor.js(который, я думаю, очень подходит для такого проекта). Операционные преобразования очень важны для моего проекта, если я думаю о его масштабировании. Мои текущие знания показывают, что метеор не поддерживает операционную трансформацию из коробки (исправьте меня, если я ошибаюсь здесь).
Итак, в основном мой вопрос: как реализовать операционное преобразование в meteor.js?
Я попытался использовать эту библиотеку google-diff-match-patch, Нейл Фрейзер, но были проблемы при применении патчей (хотя он довольно легко работал вне meteor.js).
Итак, любые предложения?
Ответы
Ответ 1
После просмотра нескольких проектов Meteor используют OT (т.е. http://cocodojo.meteor.com/), я решил пойти на правильную интеграцию.
Я создал интеллектуальный пакет для интеграции ShareJS в метеорит. Пожалуйста, присмотрите его и добавьте ваши запросы на тягу: https://github.com/mizzao/meteor-sharejs
Демо-приложение: http://documents.meteor.com
Ответ 2
В совместном текстовом редакторе в браузере есть два основных компонента: сама текстовая область, которая должна вести себя хорошо, координируя ввод пользователя с другими изменениями, полученными с сервера; и модель данных для отправки, приема и объединения этих изменений.
Сегодня Meteor не предоставляет особой помощи ни для одной из этих вещей, но обеспечивает передачу данных в реальном времени и способ автоматического перемещения данных между клиентом и сервером.
Если бы я должен был реализовать EtherPad на Meteor, я всегда думал, что буду использовать коллекцию как "журнал операций". Пользовательские изменения будут отправлены на сервер, где они будут добавлены к официальному журналу операций (в основном, разным), который автоматически будет передаваться всем клиентам. Клиент будет работать с применением различий, которые входят и согласовывают их с типом, который еще не был подтвержден сервером.
Это сложная задача реализации. Удачи!