Несколько пакетов UDP в сокете - PullRequest
1 голос
/ 12 октября 2011

Предположим, у меня есть сервер с несколькими клиентами (UDP).Всякий раз, когда он получает пакет от клиента, сервер будет тратить 1 секунду на обработку пакета и отправлять этот новый пакет всем клиентам сразу после обработки.

Сможет ли сервер сделать это, если поступит 10 пакетовв течение 0,1 секунды?Другими словами, может ли он отправлять новый пакет каждому клиенту сразу после обработки первого принятого пакета?(У меня такое ощущение, что сокет будет «забит» 9 другими непрочитанными пакетами)

Цикл сервера будет выглядеть так:

while (1) {
    read_a_packet()
    process_packet()
    send_new_packet_to_all_clients()
}

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Входящие UDP-пакеты помещаются в буфер для последующего извлечения.Если ваша обработка достаточно медленная, чтобы заполнить буфер сокета пакетами, следующие пакеты будут просто отброшены.

См. Также Как переполнение буфера сокета Linux? и C ++ UDP-сокетыОчередь пакетов (см. также комментарии там).

0 голосов
/ 12 октября 2011

По вашему собственному определению, process_packet() требуется 1 секунда для запуска. Поток может делать только одно за раз, поэтому такой зацикленный сервер в одном потоке будет обрабатывать 10 пакетов за 10 секунд. Поэтому вы можете ускорить process_packet() до 1 секунды или запустить несколько потоков обработки, чтобы вы могли обрабатывать несколько пакетов параллельно.

...