Лично я бы выбрал одно постоянное TCP-соединение для каждого клиента, чтобы избежать: а) дополнительной работы по созданию и уничтожению соединений и дополнительной задержки, связанной со всеми задействованными пакетами TCP, и б), чтобы избежать создания большого количества сокетов в TIME_WAIT.на клиентах или на сервере.Для создания и уничтожения соединений просто нет веских оснований.
В зависимости от вашей платформы могут быть разные приемы для решения различных проблем, специфичных для платформы, которые могут возникнуть при большом количестве открытых соединений и при большом количествеЯ имею в виду десятки тысяч.Например, в Windows использование перекрывающихся портов ввода-вывода и завершения ввода-вывода было бы хорошим вариантом для большого количества соединений, и если ваши соединения обычно простаивают большую часть времени, то вы можете обнаружить, что с помощью трюка «чтение нулевого байта»позволит вам обрабатывать больше соединений на меньшем оборудовании;но это то, что вы можете добавить, как только узнаете, что у вас есть проблема из-за объема буферного пространства, которое вы ожидаете для чтения, которое завершается нечасто.
Я бы не позволил клиентам опрашивать сервер.Это неэффективно.Пусть сервер публикует данные для клиентов по мере доступности данных.Это позволило бы серверу несколько контролировать рабочую нагрузку, позволяя ему решать, как часто отправлять данные клиентам - он мог либо отправлять каждый раз, когда новые данные становятся доступными для клиента, либо отправлять после того, как пакетировал некоторые данные и ждал короткое время.время и т. д. Если сервер отправляет данные, то сервер (слабое место, место, которое может быть перегружено запросом клиента), имеет больший контроль над работой, которую ему необходимо будет выполнить.
Если у вас есть каждый клиентский опрос, то а) вы генерируете больше сетевого шума, так как каждый клиент отправляет сообщение, чтобы спросить сервер, есть ли у него что-то, что он должен отправить, и б) вы генерируете больше работыдля сервера, так как он должен отвечать на опросы.Сервер знает, когда есть данные для клиента, пусть он отвечает за информирование клиентов.