我正在尝试通过读取块内的 nc 向 statsd 发送一个小字符串:
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 的超时值,因此它根本不会等待。
我有同样的问题;
-c
使用选项解决了它:所以像
是的,“关闭”udp 连接并没有真正的意义——但最终还是奏效了。
添加 -v 选项解决了我的问题。我不确定的原因。
对我们来说,这是我们通过 python 脚本从一台机器向另一台机器发送 nc 有效载荷。在 python 中,当我们将有效负载显式编码为“UTF-8”时,它就可以正常工作。