Мое Java-приложение получает данные через UDP. Он использует данные для задачи онлайн-анализа данных. Это означает, что не важно получать каждый пакет, что делает выбор UDP разумным с самого начала. Кроме того, данные передаются по локальной сети, поэтому физическая сеть должна быть достаточно надежной. Во всяком случае, я не могу контролировать выбор протокола или данных.
Тем не менее меня беспокоит потеря пакетов, которая может возникнуть из-за перегрузки и длительного времени обработки самого приложения. Я хотел бы знать, как часто это происходит и сколько данных теряется.
В идеале я ищу способ непрерывного мониторинга потери пакетов в производственной системе. Но частичное решение также будет приветствоваться.
Я понимаю, что невозможно всегда знать о потерях пакетов UDP (без контроля над содержимым пакетов). Я думал о чем-то вроде пакетов, полученных ОС, но никогда не поступающих в приложение; или, может быть, какое-то умное решение внутри приложения, например поток быстрого чтения, который отбрасывает данные, когда его клиент занят.
Мы развертываем под Windows Server 2003 или 2008.