我正在使用 python 脚本使用标准的 print() 参数生成数据。然后应该将脚本的输出发送到 localhost tcp 套接字 9999。

python script.py | nc -lk 9999

在客户端,我正在监听 localhost tcp socket 9999 以验证一切正常。
nc localhost 9999

是的,它正在发挥作用。但看起来 nc 在发送之前正在缓冲一些消息。结果,我在客户端得到了巨大的延迟,这对我的应用程序来说是 Not Acceptable :我需要尽快获取数据。

有没有办法禁用缓冲区?

我注意到如果我发送更多消息,延迟会减少。但是,这对我来说并不是真正的解决方案。

最佳答案

您可以使用 stdbuf 命令:

stdbuf -o0 python script.py | stdbuf -i0 nc -lk 9999

或者 python 的 -u Unbuffered 选项:
python -u script.py | stdbuf -i0  nc -lk 9999

I/O 缓冲是由 libc 处理的,除非程序自己明确处理它。 stdbuf 影响该行为。进一步阅读 man stdbuf

关于linux - 强制 netcat 立即发送消息(无缓冲),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34204697/

10-16 20:19