время синхронизации между клиентами - PullRequest
0 голосов
/ 01 октября 2018

У меня есть эта структура документа в коллекции Firestore

{ message: 'hello world', time: 1538398128 }

значение времени устанавливается клиентом, когда он отправляет сообщение с этой функцией

moment().unix()

Проблема в том, что у моих клиентов разныевремя, и если я сортирую документы по времени, это противоречиво, как в этом примере

{ message: 'aaa', time: 1538398317 } // client 1 post at 14.00:00
{ message: 'bbb', time: 1538398257 } // client 2 post at 14:00:10

, и на клиенте я вижу "bbb" перед "aaa".Как я могу решить эту проблему?Я знаю, что существует firebase.firestore.FieldValue.serverTimestamp (), но он дает мне значение только после того, как я опубликовал документ, я не могу использовать это на клиенте.Спасибо

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Невозможно идеально синхронизировать различные клиентские устройства (телефоны / браузеры) со временем, так как у вас нет механизма для синхронизации их часов.

Чтобы обеспечить согласованный порядок, вам потребуетсяиспользовать firebase.firestore.FieldValue.serverTimestamp(), который после подтверждения будет возвращен клиенту.Пока вы ждете этого, вы можете использовать клиентское время в качестве резервного механизма.Более того, вы можете обратиться к какому-нибудь серверу времени, чтобы проверить, что локальные часы не слишком далеки от использования.

0 голосов
/ 01 октября 2018

Ну, вам нужно будет выбрать один часовой пояс и использовать его в качестве стандартного для согласованного хранения данных, иначе каждый клиент будет использовать локальный.Возможно, вы захотите использовать moment-timezone расширение для момента, где вы можете указать часовой пояс, который вы хотите использовать: https://momentjs.com/timezone/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...