Синхронизация часов между клиентскими и серверными программами в c

avatar
Jevin Anderson
21 ноября 2012 в 21:48
3996
1
0

Я работаю над проектом, в котором сервер анализирует аудиофайлы, а затем приказывает клиентам воспроизводить определенные фрагменты аудио на основе общих часов, серверных. Теоретически нам может потребоваться высокий уровень синхронизации, поскольку клиентские узлы могут воспроизводить звук рядом друг с другом, и все задержки, кроме самых малых, могут вызывать смещение звука, заметное для человеческого уха. Я пытался найти примеры кода c, как решить эту проблему, и мне не повезло.

Я читал много статей в Википедии о синхронизации часов.

http://en.wikipedia.org/wiki/Clock_synchronization

Приведенные выше статьи наводят меня на мысль, что протокол PTP идеально подходит для нашей реализации в локальной сети. Но в идеале мы хотели бы расширить наш проект, чтобы обеспечить подключение через Интернет. Это заставило меня поверить, что NTP будет лучше. Я посетил NTP.org, но мне было трудно понять, и казалось, что если мои приложения находятся в локальной сети, которая не подключена к Интернету, я вообще не могу использовать NTP. Но потом я нашел этот пост:

Малая синхронизация часов без NTP

И ответ Сета Робертсона заставил меня поверить, что я ошибался.

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

Проблема в том, что он не показал эти строки кода и не указал мне место, где я мог бы просмотреть код, который решает эти проблемы.

Я искал coderhelper и нашел много похожих вопросов, но ни один из них не дал удовлетворительных ответов.

Итак, после стены текста (извините за это, совет по вопросу о переполнении стека оказался очень конкретным и объясняет исследование, которое я провел перед тем, как задать вопрос), я хотел бы кратко сформулировать свой вопрос и, надеюсь, кто-нибудь может мне помочь:

В модели программного обеспечения клиент / сервер, как я могу поддерживать точную синхронизацию часов в программном обеспечении, чтобы обеспечить выполнение событий на основе времени?

В настоящее время наша группа использует UDP, но при необходимости мы готовы изменить это.

Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: Я понимаю, что мне нужно поддерживать синхронизацию часов, вопрос в том, КАК мне это сделать в программном обеспечении. Я ищу пример кода или гиперссылку на место, где я могу найти образец кода по этой теме. КОНЕЦ

Источник
nos
21 ноября 2012 в 21:54
1

NTP упакован для большинства операционных систем, и обычно это просто вопрос запуска сервера (и его установки, если вы используете ОС, где он еще не установлен). Однако вам действительно нужно время, чтобы синхронизировать это? Разве позиция в аудио не дает вам эталонное время, т.е. ваш сервер определяет, что в это время поток должен воспроизводиться с определенным байтовым смещением, и вы передаете это смещение клиентам

ninjalj
21 ноября 2012 в 22:29
0

Я не думаю, что ntp - это то, что вы ищете. Похоже, лучше подойдет JACK Audio Connection Kit.

Ответы (1)

avatar
alk
21 ноября 2012 в 21:52
0

Идея ясна: выберите один хост в вашей сети в качестве сервера NTP и позвольте другим хостам синхронизироваться с этим сервером.

Если вам нужна просто синхронизация между хостами вашей локальной сети, это должно быть сделано.

NTP-серверы и клиенты свободно доступны для многих систем.

Jevin Anderson
24 ноября 2012 в 17:59
0

Выберите один хост в вашей сети в качестве сервера NTP, и позвольте другим хостам синхронизироваться с этим сервером. Да, это именно то, что я хочу сделать. Как мне это сделать?

alk
24 ноября 2012 в 21:25
0

Какую ОС используют ваши серверы? @ user1843252

Jevin Anderson
25 ноября 2012 в 20:13
0

Сервер использует Linux Redhat.

alk
26 ноября 2012 в 09:56
0

Домашняя страница NTP дает много информации по адресу: ntp.org/ntpfaq Кроме того, я не администратор Red Hat. Быстрый поиск в Google для "howto ntp redhat" обнаружил это, например, halley.cc/ed/linux/howto/ntp.html и множество других страниц, посвященных настройке сервера NTP. @ user1843252