Синхронизация имени файла для документа Drive Realtime
Мой документ в реальном времени позволяет пользователю редактировать имя файла в редакторе (так же, как собственные приложения Google). Я представляю это как строку для совместной работы, поэтому все соавторы видят переименования файлов как можно скорее.
Я пытаюсь определить лучший и наиболее эффективный способ синхронизации этой строки сотрудничества с реальным именем файла. Есть два сценария для рассмотрения:
Изменения в редакторе
Если пользователь редактирует имя документа в редакторе. В этом случае нам нужно использовать Drive API, чтобы передать это изменение в файл на диске Google. Чтобы избежать условий гонки, лучше всего, если только один из соавторов отменит изменения. Кажется, что самый простой способ сделать это - проверить, было ли событие переименования локальным.
Я также нашел, что лучше всего добавить задержку, чтобы мы не выдвигали переименование в Drive API при каждом изменении символа. Если в этот момент проходит несколько секунд без изменения имени, это вытесняет изменение. Кажется, все это работает хорошо.
Внешние изменения
Сложнее, и тот, который меня интересует, запрашивая совет, тот случай, когда имя файла изменяется внешне. Например, если пользователь переименовал файл в самом интерфейсе Drive. Мы хотим, чтобы это изменение обновляло нашу совместную строку.
Мое приложение полностью на стороне клиента, поэтому я не могу использовать push-уведомления webhook. Поэтому мое единственное решение - опрашивать имя файла каждые X секунд (в настоящее время установлено значение 10). Но это представляет следующие проблемы:
- Это API интенсивно. Если у вас есть 4 сотрудника, которые держат экран открытым в течение 8 часов, это 11520 вызовов API. Если бы в моем приложении было много пользователей с большим количеством документов, я мог бы понять, как это может подтолкнуть меня за пределы моего API.
- Чтобы избежать условий гонки (и уменьшить количество вызовов API), мы хотим, чтобы только один соавтор проверял изменения и обновлял строку сотрудничества, если имя файла изменилось. Но как выбрать, когда соавторы могут присоединиться / выйти в любое время? В настоящее время я каждый раз проверяю соавторов, меняются ли соавторы, являются ли они "лидерами". "Лидер" - это сотрудник, чей идентификатор сессии самый высокий. Это, кажется, работает, но все это кажется довольно хакерским. Также, если соработники объединяются близко друг к другу, мне интересно, возможно ли, что из-за состояния гонки несколько соавторов будут считать себя лидером.
Есть ли более простой способ? Функция API в реальном времени мне не хватает?
Было бы идеально, если бы API реального времени просто предоставлял метод, в котором сохранено имя документа. Каждый раз, когда API в реальном времени проверяет наличие мутаций, он может получить последнее имя документа.
1 ответ
Я думаю, что вы определили варианты. В настоящее время нет встроенных функций, позволяющих синхронизировать его с помощью API реального времени.
Лично я бы, вероятно, сильно отодвинул время опроса..., вероятно, не критично, что заголовок всегда точно обновлен, поэтому, вероятно, достаточно спрашивать каждые несколько минут, что значительно уменьшит ваш QPS.
С точки зрения определения "лидера", я не могу придумать ничего лучше, чем что-то детерминированное на основе идентификатора сеанса. Пока каждая перепроверка каждого сеанса присоединяется / покидает событие, я не думаю, что должны быть какие-либо проблемы.