强制 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
.
我正在使用 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
.