средства для квази-параллельной работы с множеством клиентов
Вот в этом собственно и вопрос:
Для TCP, при подсоединении нового клиента, после Socket.EndAccept возвращается новый Socket, котрый принимает данные по ".BeginReceive", и независимо от остальных соединений, то-есть паралельно
А для UDP есть только "BeginReceiveFrom" который "общий" для всех клиентов, подключённых к этому порту, то-есть пока конкретный "AsyncCallback" не отработает, и не вызовет заново BeginReceiveFrom, пакет с другого клиента (который уже возможно принят и ждёт в очереди), прочитать не получится
Что я упускаю? Можно ссылку не конкретный пример
Вопрос ов производительности:
в TCP для 10000 сокетов приём может выполняться паралельно (в зависимости от количества свободных ядер CPU
а вот для UDP для одного входящего (слушаещего) порта чтение в клиенте идёт последовательно, то есть пока один вызов не отработал, следующий ждёт, даже если в буфере Windows есть данные от "другого" клиента. То-есть ресурсы машины не используются по полной и общая производителность будет ниже чем TCP (естественно в случае если приём пакетов это единственное "узкое" место)
Так ли это?
Если да, то как решают эту проблему? (уверен я не первый который общаенся по UDP с десятками тысяч устройств одновременно...
Пользуюсь recvfrom, с адресом отправителя проблем нет
Вопрос о производительности:
recv в TCP для 10000 сокетов может выполняться паралельно (в зависимости от количества свободных ядер CPU (так ли это?)
а вот recvfrom для UDP для одного входящего (слушаещего) порта и 10000 клиентов - последовательно, то есть пока один вызов не отработал, следующий ждёт, даже если в буфере Windows есть данные от "другого" клиента. Тоесть ресурсы машины не используются по полной и общая производителность будет ниже чем TCP (естественно в случае если приём пакетов это единственное "узкое" место
Так ли это?
Если да, то как решают эту проблему? (уверен я не первый который общаенся по UDP с десятками тысяч устройств одновременно...
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
То есть если у меня 100000 клиентов, то все данные попадают в одну очередь, из которой моё приложение может считывать данные только последовательно?