Я пытаюсь отправить небольшую строку в statsd через nc внутри блока чтения:
while read line; do
printf "folder.counter:value|1c" | nc -q 0 -u $host $port
done
К сожалению, когда в режиме UDP nc, кажется, хочет ждать бесконечно, хотя я и указал -q 0
, что, по словам справочной страницы, программа завершит работу сразу после EOF.
Я попытался передать -w 1
, но если данные, которые я посылаю, поступают со скоростью более одной строки в секунду, данные буферизуются, и я теряю свою статистику в реальном времени (не говоря уже о риске переполнения буфера какого-то рода).
Можно ли сделать то, что я пытаюсь сделать с netcat, или мне нужно написать что-то на языке, который имеет библиотеку statsd?
Ответы:
Я решил проблему, переключившись на
socat
:источник
Вы можете указать 0 в качестве значения тайм-аута для -w, поэтому он вообще не будет ждать.
источник
invalid wait-time 0
добавление опции -v решило мою проблему. Причина, по которой я не уверен.
источник
У меня была такая же проблема; решил это с помощью
-c
опции:так что-то вроде
Да, на самом деле не имеет смысла «закрывать» udp-соединение - но это сработало.
источник
-c
решило мою проблему сnetcat (The GNU Netcat) 0.7.1
Для нас это было то, что мы отправляли полезную нагрузку nc с одной машины на другую через скрипт python. В питоне, когда мы явно кодировали полезную нагрузку в 'UTF-8', это просто работало.
источник