强制 netcat 立即发送消息(无缓冲)

Force netcat to send messages immediately (without buffering)

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

python script.py | nc -lk 9999

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

nc localhost 9999

是的,它正在运行。但看起来 nc 在发送之前缓冲了一些消息。结果,我在客户端出现了巨大的延迟,这对我的应用程序来说是不可接受的:我需要尽快获得数据。

有没有办法禁用缓冲区?

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

您可以使用stdbuf命令:

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

或 python 的 -u 无缓冲选项:

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

I/O 缓冲是由 libc 处理的,除非程序明确地自行处理它。 stdbuf 影响该行为。延伸阅读 man stdbuf.