У меня есть несколько систем в локальной сети, на которых выполняется процедура синхронизированного отображения. Например, подумайте о линии хора. Программа, которую они запускали, исправлена. У меня каждый «клиент» загружает всю подпрограмму, а затем связывается с центральным «сервером» в фиксированных точках подпрограммы для синхронизации. Сама процедура рутинна, возможно, с 20 возможными инструкциями.
Каждый клиент выполняет одну и ту же процедуру, но в любой момент он может делать совершенно разные вещи. Одна часть линии хора может быть ударом влево, другая часть - вправо, но все время друг с другом. Клиенты могут присоединиться и выйти в любой момент, но им всем назначена часть. Если нет никого, кто мог бы запустить часть, она просто не запускалась.
Это все закодировано в C # .Net.
Дисплей клиента представляет собой приложение Windows Forms. Сервер принимает соединения TCP, а затем обслуживает их циклически, сохраняя основные часы происходящего. Клиенты посылают сигнал, который говорит: «Я достиг точки синхронизации 32» (или 19, или 5, или что-то еще) и ждет подтверждения от сервера, а затем продолжает работу. Или сервер может сказать «Нет, вам нужно начать с точки синхронизации 15».
Все это прекрасно работает. Между первым и последним клиентами, достигшими точки синхронизации, есть незначительная небольшая задержка, но она едва заметна. Бежал месяцами.
Затем Спецификация изменилась.
Теперь клиенты должны реагировать на инструкции сервера в режиме реального времени - это больше не предустановленная танцевальная программа. Сервер будет отправлять инструкции, а танцевальная программа составляется на лету. Я получаю забавную работу по перепроектированию протокола, циклов обслуживания и инструкций по программированию.
Мой инструментарий включает в себя все, что входит в стандартный набор инструментов .Net 3.5. Установка нового программного обеспечения - трудная задача, так как может быть задействовано очень много систем (клиентов).
Я ищу предложения по синхронизации клиентов (какая-то система блокировки? UDP? Broadcast?), Распространение "танцевальной программы", что-нибудь, что может сделать это проще, чем традиционная договоренность между клиентом и сервером TCP.
Имейте в виду, что существуют также ограничения по времени / скорости. Я мог бы поместить танцевальную программу в сетевую базу данных, но мне пришлось бы достаточно быстро вводить инструкции, и было бы много читателей, использующих довольно толстый протокол (DBI, SqlClient и т. Д.), Чтобы получить немного текста. Это кажется слишком сложным. И мне все еще нужно что-то, чтобы они все отображались синхронно.
Предложения? Мнения? Дикая спекуляция? Примеры кода?
PS: Ответы не могут быть помечены как «правильные» (поскольку это не «правильный» ответ), но +1 голос за хорошие предложения наверняка.