Клиенты Fluid не синхронизируются при перезагрузке сервера

#fluid-framework

#fluid-framework

Вопрос:

Я получил пример HelloWorld для нормальной работы. Но как только я остановил и перезапустил сервер, клиенты вышли из синхронизации — даже когда я установил согласованный документ (т. Е. location.hash = "12345" ).

Настройка createNew=false сломала приложение (без кубиков — буквально).

И я получаю много повторяющихся ошибок:

 [start:server] error: Connect Document error: {} {"messageMetaData":{"documentId":"1608237690408","tenantId":"tinylicious"},"label":"winston","timestamp":"2020-12-17T20:45:13.160Z"}
[start:server] info: Disconnect of 60c72737-3e05-4bc7-bf9b-f7ca6439a431 from room {"messageMetaData":{"documentId":"1608237690408","tenantId":"tinylicious"},"label":"winston","timestamp":"2020-12-17T20:45:13.161Z"}
 

Поддерживает ли Fluid этот сценарий? Или я делаю что-то не так?

Ответ №1:

Служба tinylicious может поддерживать отключение и включение с долговременными данными, но на самом деле это тестовая служба. При перезапуске службы вы, вероятно, захотите выбрать новый documentId.

createNew это более интересная история. Приложение Hello World является несколько надуманным примером. В общем случае разработчик приложения получит сигнал от пользователя о том, что необходимо создать новый документ. Подумайте о документах Google.

«Создать новый документ Google» -> createNew === true

«Открыть существующий документ Google» -> createNew === false

Однако для сценария Hello World мы хотим иметь как можно меньше кода. Мы, конечно, не хотим выписывать целую схему управления документами. Поэтому мы полагаемся на маленькую хитрость: если вы вставляете URL-адрес с определенным идентификатором документа, мы предполагаем, что вы загружаете существующий документ, в противном случае мы создадим для вас новый.

Вот что делает приведенное ниже!

Вы увидите эффекты в URL-адресах, которые выглядят примерно так: http://localhost:8080/#1608592296522

 let createNew = false;
if (location.hash.length === 0) {
    createNew = true;
    location.hash = Date.now().toString();
}
const documentId = location.hash.substring(1);
document.title = documentId;
 

Комментарии:

1. ОК. Я искал «тестовый» пример, который я мог бы протестировать в бою (т. е. Сбой / перезагрузка). Кроме того, я полагаю, что для «долговечности» нам понадобится база данных или что-то в этом роде. Я не вижу никакой базы данных в примерах.

2. Сервер routerlicious подходит лучше. Он хорошо протестирован, масштабируем и достаточно долговечен. Я считаю, что потоки devops могли бы использовать еще немного работы.