我正在使用python脚本使用标准的print()参数生成数据。然后应该将脚本的输出发送到localhost tcp socket 9999。
python script.py | nc -lk 9999
在客户端,我正在监听localhost tcp socket 9999以验证一切正常。
nc localhost 9999
是的,它正在发挥作用。但看起来nc在发送之前会缓冲一些消息。结果,我在客户端遇到了很大的延迟,这对我的应用程序来说是不可接受的:我尽快需要数据。
有没有办法禁用缓冲区?
我注意到如果我发送更多消息,延迟会减少。但是,这对我来说并不是一个真正的解决方案。
答案 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
。