Основы многоадресной рассылки - потерянные данные - PullRequest
1 голос
/ 08 июля 2011

Это основной принцип чтения многоадресных данных, если ваше приложение не обрабатывает следующая дейтаграмма, которая приходит раньше, чем приходит другая, первая по сути перезаписаны? Я провел некоторые эксперименты, и увеличение размеров receive_buffer не имеет никакого эффекта на что я описываю. Другими словами, кажется, что нет низкоуровневой очереди многоадресных дейтаграмм с помощью ОС Windows или программного обеспечения NIC.

Я правильно понимаю? Или есть какой-либо вариант сокета или элемент управления, который может помочь с этим?

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Windows XP имеет буфер сокетов по умолчанию 8 КБ, Vista и более поздние имеют буфер сокетов по умолчанию 64 КБ. Вы можете переопределить это с помощью SO_RCVBUF, рекомендуется никогда не устанавливать значение 0 в отличие от SO_SNDBUF для нулевого копирования при использовании IOCP.

Обычно с буферами сокетов очередь заполняется и начинает отбрасывать новые пакеты, так что с большим буфером вы можете получить устаревшие устаревшие сообщения, ожидающие в буфере и имеющие приоритет над новыми свежими данными.

Конструкция, которой вы должны следовать, - это высокоприоритетный поток в узком цикле, который читает пакеты из сети как можно быстрее и вставляет их в большую очередь приложений для последующей обработки, если ваша бизнес-логика медленнее. При использовании IOCP вы можете опубликовать несколько блокирующих вызовов recv, чтобы минимизировать потерю данных, но, как указано в документации MSDN, нет никакой гарантии в отношении порядка выполнения на порту завершения.

1 голос
/ 08 июля 2011

Если под многоадресной передачей вы подразумеваете UDP , то при использовании протокола не гарантируется упорядочение данных или даже получение данных.

Если вы обрабатываете полученные пакеты встроенными, то при этом вы определенно можете пропустить входящие данные и должны рассмотреть возможность передачи каждого пакета в отдельный поток для обработки, чтобы вы могли опубликовать другой прием как можно скорее. Это сведет к минимуму потерю данных в рамках ограничений протокола и вашей конкретной конфигурации сети.

...