несколько портов UDP - PullRequest
       4

несколько портов UDP

0 голосов
/ 10 июня 2010

У меня есть ситуация, когда мне приходится обрабатывать несколько живых потоков UDP на сервере.

У меня есть два варианта (как мне кажется)

Один разъем: 1) Прослушивание одного порта на сервере и получение данных от всех клиентов на одном и том же порту и создание потоков для каждого клиента для обработки данных до тех пор, пока клиент не прекратит отправку. Здесь только один порт используется для получения данных и количество потоков, используемых для обработки данных.

несколько розеток: 2) Клиент запросит открытый порт с сервера для отправки данных, а приложение отправит открытый порт клиенту и откроет новый поток, прослушивающий порт для получения и обработки данных. Здесь для каждого клиента будет уникальный порт для отправить данные.

Я уже реализовал способ узнать, какой пакет исходит от какого клиента в UDP.

У меня более 1000 клиентов и 60 КБ данных в секунду, которые я получаю.

Есть ли проблемы с производительностью при использовании вышеуказанных методов

или есть ли какой-нибудь эффективный способ справиться с этим типом задачи в C?

Спасибо

Raghu

1 Ответ

0 голосов
/ 19 июня 2010

При таком количестве клиентов наличие одного потока на каждого клиента очень неэффективно, так как необходимо выполнять много и много переключений контекста. Кроме того, количество портов, которые вы можете открыть для каждого IP-адреса, ограничено (номер порта равен 16 битам).

Поэтому «Single Socket» будет гораздо более эффективным. Но вы также можете использовать «Multipe Sokets» только с одним потоком, используя асинхронный API. Если вы можете идентифицировать клиента, используя полезную нагрузку пакета, то нет необходимости иметь порт для каждого клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...