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

时间:2015-12-10 14:40:41

标签: linux netcat

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

python script.py | nc -lk 9999

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

nc localhost 9999

是的,它正在发挥作用。但看起来nc在发送之前会缓冲一些消息。结果,我在客户端遇到了很大的延迟,这对我的应用程序来说是不可接受的:我尽快需要数据。

有没有办法禁用缓冲区?

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

1 个答案:

答案 0 :(得分:8)

您可以使用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