nc(netcat)在 UDP 模式下挂起,等待更多数据。

nc(netcat)在 UDP 模式下挂起,等待更多数据。

我正尝试通过读取块内的 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”对有效载荷进行编码时,它就可以正常工作。

相关内容