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

Tim*_*Tim 3 linux netcat

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

python script.py | nc -lk 9999
Run Code Online (Sandbox Code Playgroud)

在客户端我正在监听localhost tcp socket 9999来验证一切正常.

nc localhost 9999
Run Code Online (Sandbox Code Playgroud)

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

有没有办法禁用缓冲区?

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

hek*_*mgl 8

您可以使用以下stdbuf命令:

stdbuf -o0 python script.py | stdbuf -i0 nc -lk 9999
Run Code Online (Sandbox Code Playgroud)

或python的-u Unbuffered选项:

python -u script.py | stdbuf -i0  nc -lk 9999
Run Code Online (Sandbox Code Playgroud)

I/O缓冲是,除非程序由它自己显式处理它,由libc处理.stdbuf影响那种行为.进一步阅读man stdbuf.