Как тот, кто реализовал нечто подобное с более чем 500+ клиентами и растет:
Очередь сообщений - путь.
Мы прошли путь от внутреннего разработанного TCP-сервера и клиента к опросу WCF и получили очередь сообщений. Это единственный гарантированный способ получения данных от клиентов и серверов через Интернет. В качестве бонуса, многие из этих решений имеют обширную структуру, которая делает тривиальной реализацию публикации-подписки, отправки-однонаправленной передачи, двухточечной отправки, запроса-ответа. Некоторые из них возможны с WCF, но это будет включать плач, крики, хныканье и долгие ночи, не говоря уже о галлонах кофе.
Пара важных замечаний:
Разрешение процессу опрашивать клиентов, а не наоборот = Плохая идея .. он вообще не масштабируется, и вы скоро столкнетесь с проблемами, если процесс займет слишком много времени для завершения .. Не говоря уже о наличии для обработки всех ip-адресов (есть ли у вас доступ ко всем клиентам на требуемых портах? Что лучше, когда меняется ip и т. д.)
что мы сделали: клиенты регулярно отправляют обновления состояния в центральную очередь сообщений (вы можете легко реализовать оперативные обновления в пользовательском интерфейсе), а также прослушивают в своей собственной очереди сообщение GetStatusRequest. если он получает это, он отвечает (имеет тайм-аут) .. таким образом, мы можем видеть общее состояние всех клиентов в любое время и получать определенный статус определенного клиента при необходимости.
Относительно пропускной способности: в киоске обычно показываются изображения / видео и т. Д. Сообщения о статусе 1Kb или меньше не будут большими накладными расходами
Я НЕ МОГУ подчеркнуть, что нынешний дизайн, который вы представляете, будет иметь очень интенсивный цикл разработки И не будет масштабироваться или расширяться (поверьте мне, мы усвоили этот урок). Кроме того, создание хорошего клиент-серверного протокола для такого типа вещей - сложная работа, которая впоследствии будет совершенно бесполезна, если вы допустите ошибку проектирования (перенести протокол не так просто)
Мы создали наше решение поверх ActiveMQ (используя библиотеку NMS c #) и в настоящее время расширяем Simple Service Bus для нашей внутренней работы.
Мы используем WCF только для связи между нашим приложением winforms и централизованными службами