Estoy escribiendo una aplicación web de música colaborativa que se puede "reproducir" en paralelo a través de navegadores en diferentes dispositivos. Imagine a dos personas paradas en la misma habitación y tocando sus "instrumentos" juntas. Cada uno con un dispositivo diferente que ejecuta una aplicación web en sus manos.
Necesito que ambos dispositivos tengan un temporizador sincronizado donde acuerden qué hora es +/- varios milisegundos.
Mi primer intento fue simplemente confiar en que mis 2 dispositivos (PC con Windows y teléfono Android) están sincronizados. Pero tienen varios segundos entre sus relojes. Entonces me doy cuenta de que necesito implementar esto yo mismo.
¿Existe un servicio REST/Websocket que pueda usar para sincronizar periódicamente la hora de las aplicaciones? Si no, ¿existe un algoritmo estándar que sería efectivo para implementar en websocket?
Mi instinto ingenuo es implementar un ping de 4 vías entre el cliente y el servidor, y la mitad de su tiempo de ping/pong, pero estoy bastante seguro de que alguien ya ha implementado algo mejor.
Como estamos hablando de música, los cambios de tiempo multijugador estándar no son suficientes. Necesito que los relojes estén sincronizados con mayor precisión que el tiempo de ping de la red.
¿Hay algo como NTP que funcione en un navegador?