我试图发送一个小stringstatsd通过读取块内的NC:
while read line; do printf "folder.counter:value|1c" | nc -q 0 -u $host $port done
不幸的是,在UDP模式下,即使我指定了-q 0 ,nc似乎也想无限期地等待,手册页说这会使程序在EOF之后立即退出。
我尝试过传递-w 1 ,但是如果我发送的数据以每秒多于一行的速度进入,则数据缓冲起来,并且我失去了我的实时统计信息(更不用说冒着某种缓冲区溢出的风险)。
是否有可能做我想用netcat做什么,或者我需要写一些语言,它有一个statsd库?
我最终通过切换到socat来解决问题:
while read line; do printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port done
你可以指定0作为-w的超时值,所以它不会等待。
添加-v选项解决了我的问题。 我不确定的原因。
知道这是一个旧的职位,但只是想我会无论如何贡献。 我有同样的问题; 使用-c选项解决它:
-c, --close close connection on EOF from stdin
所以有点像
while read line; do printf "folder.counter:value|1c" | nc -cu $host $port done
是的,“closures”一个udp连接并没有什么意义,但是最终还是起作用了。