我正尝试通过读取块内的 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 库的语言编写一些东西?
答案1
您可以将 0 指定为 -w 的超时值,这样它根本不会等待。
答案2
我最终通过切换到以下方式解决了该问题socat
:
while read line; do
printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port
done
答案3
添加 -v 选项解决了我的问题。我不确定原因。
答案4
对于我们来说,我们是通过 Python 脚本将 nc 有效载荷从一台机器发送到另一台机器。在 Python 中,当我们明确使用“UTF-8”对有效载荷进行编码时,它就可以正常工作。