Концептуально, вы можете сделать следующее:
- У каждого клиента установить привязку по времени против общего сервера.
- Отправляйте сообщение изменения цвета каждому клиенту с определенной меткой времени в будущем, когда должен быть запущен эффект изменения цвета.
- Когда каждый клиент получает сообщение с изменением цвета, он смотрит на запланированную временную метку в ближайшее время, исправляет привязку времени и назначает событие против своих собственных часов.
- Когда это время приходит к каждому клиенту, каждый клиент начинает воспроизведение события.
Это будет точно так же, как указание времени, которое вы устанавливаете на шаге 1, и здесь находится сложная часть и где установлена точность отсутствия точности. В этом посте описано описание одного метода: Measuring time difference between networked devices.
Как только вы установили временную дельта между клиентскими часами и опорными часами, вы храните эту дельту локально, и вы можете применить эту дельта к любым директивам будущего времени с сервера. Итак, если вы получаете директиву для выполнения какой-либо операции в 12:30 - 05.00, но ваши клиентские часы были измерены на +12.33 секунды быстрее от ссылки на сервер, тогда вы вычтите это +12.33 секунды с запланированного времени и установите таймер, который будет срабатывать при 12: 29: 52.67 на ваших местных часах.
Вы обрабатываете тот факт, что время транзита для каждого клиента может быть не таким, отправив директиву на определенное время в будущем. Вы можете выбрать любое время в будущем, но это не должно быть более длительным временем в будущем, чем самое длинное время перехода к любому клиенту. Вы также можете измерить это от каждого клиента и сообщить об этом на сервер или если у вас есть достаточно времени для планирования заранее, вы можете просто отправить сообщение с директивой по крайней мере за несколько секунд досрочно (дольше, чем любое время транзита, вероятно, будет быть в нормальных условиях эксплуатации).
В чем проблема, которую вы действительно пытаетесь решить? И насколько точным в мс должна быть синхронизация? – jfriend00
Я пытаюсь получить эффект изменения цвета для синхронизации на разных устройствах, чтобы все они менялись на один и тот же цвет одновременно. Как можно точнее было бы неплохо, но я бы согласился на менее 200 мс. –