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