Мы разрабатываем приложение, которое будет установлено на ПК, и оно будет выполнять загрузку и загрузку фона на наш сервер. Одним из требований является обнаружение того, что интернет-соединение в настоящее время занято (скажем, более 50% использования), и если это так, ему необходимо отступить и попробовать другое время. Основная причина заключается в том, чтобы приложение не мешало работе с пользователями, если они находятся в середине игр, смотрят онлайн-фильм или агрессивно загружают файлы.Обнаружение, если интернет-соединение занято
После долгих размышлений и исследований по Google и, конечно же, SO, t нашел хороший способ, как реализовать это, поэтому решил бросить это здесь. Приложение реализовано на C#, .NET 4.0, и я ищу все формы ответов - либо на C#, либо на других языках, псевдо-логику или подход к достижению - измерение использования интернет-трафика на локальном ПК с хорошим достаточная точность.
Во избежание дублирования усилий, до сих пор я пытался эти (и почему они не подходят)
- Использование WMI, чтобы получить сетевой статистики. Большинство сообщений SO и решений там, поскольку ссылаются на это как на подход, но это не соответствует нашему требованию, поскольку измерение байтов, отправленных/полученных по пропускной способности сетевого интерфейса (например, 1 ГБ Ethernet-карты) для использования, даст хорошую меру для трафика ЛВС но не для интернет-трафика (где фактическая пропускная способность Интернета может быть всего лишь 8 Мбит/с)
- Использование статистики сети .NET или счетчик производительности - аналогичные показания к вышеуказанному имеют те же недостатки
- Использовать ICMP (Ping) и измерять RTT. Было высказано предположение, что 400 мс RTT считается медленным и хорошим показателем для занятой сети, однако мне сказали, что пользователь с модемом (да, мы должны это поддержать), использование обратного прокси или микроволнового канала часто вызывает пинг выше, что, следовательно, не является хорошим measure
- Начать загрузку известного файла и измерить скорость - это само генерирует трафик, который мы пытаемся избежать, также если эта проверка выполняется достаточно часто, наше приложение в конечном итоге создаст много интернет-трафика - что опять же не идеально
- MOD: Использование BITS - эта услуга может быть отключена пользователем ПК, требует изменений политики группы и предполагает сервер быть IIS (с пользовательской конфигурацией) и в нашем случае наш сервер не IIS
Так вот, я все смущаюсь и ищу совет. Я выделил текст вопроса, чтобы вы, ребята, не потерялись, прочитав это и задавшись вопросом, в чем вопрос. Благодарю.
Правильным решением будет QoS на маршрутизаторе. Жаль, что большинство потребительских маршрутизаторов сосать. – CodesInChaos
Похоже на общую проблему, но похоже, что нет общего решения :( –
Поскольку проблема невозможна для решения на уровне ПК, ваше программное обеспечение не может знать, сколько трафика генерирует кто-то другой, используя тот же маршрутизатор. – CodesInChaos