【问题标题】:Force netcat to send messages immediately (without buffering)强制 netcat 立即发送消息(不缓冲)
【发布时间】:2015-12-10 14:40:40
【问题描述】:

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

python script.py | nc -lk 9999

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

nc localhost 9999

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

有没有办法禁用缓冲区?

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

【问题讨论】:

  • 您是否进行了 Google 搜索? “linux netcat no buffer”给了我这个作为第一个结果:superuser.com/a/429134/206562
  • 是的,我看到了这篇文章。但是,在使用我的脚本时它对我不起作用。
  • 值得注意的是nc从不缓冲,它总是立即发送数据。缓冲的是 Python 程序,因为 stdout 不是终端。

标签: linux netcat


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2017-05-31
    • 1970-01-01
    • 2016-10-25
    相关资源
    最近更新 更多