Для TCP я использую поток, который инициализируется из потока протокола основного сервера; когда происходит изменение в основной структуре данных, которую необходимо отправить каждому клиенту, устанавливается статическое логическое значение и отправляет эти соответствующие данные клиенту, который также имеет поток, который реализуется из потока основного протокола клиента для прослушивания и реализовать эти изменения.
Я использую систему передачи токенов для блокировки доступа к структуре данных, поэтому клиент может вносить изменения только при вызове своего токена. Я помечаю каждый токен так, чтобы статическая переменная не устанавливалась в ложь, пока каждый пользователь не получит данные, которые нужно изменить.
Это более сложная задача в логике, чем использование одной строки кода. Независимо от того, какой интерфейс библиотеки должен был бы использовать подобную логику в том смысле, что он должен связываться с (n) числом клиентов.
В моем случае такое использование уменьшает количество клиентских вызовов и позволяет передавать только те данные, которые были изменены. В отличие от начальной загрузки, когда передается вся структура данных, но я делаю нечто подобное, что также связано с обходом структуры данных и сохранением ее на жесткий диск. Это означает сокращение данных, которые передаются по сети, и дольше сохраняет основной поток протокола открытым, чтобы те, кому действительно нужен доступ, могли его получить.
edit: чтобы никто не жаловался, я говорю прямо по TCP / IP, а не по UDP, где необходимо установить соединение. UDP использует многоадресную концепцию, и ее настройка довольно проста. Осторожно, он подвержен риску безопасности, и хотя он действительно обеспечивает некоторую эффективность, его область применения следует рассматривать как ограниченную.