【问题标题】:Using Boost::Asio socket Seeing 500ms in read使用 Boost::Asio 套接字读取 500 毫秒
【发布时间】:2013-03-15 13:55:15
【问题描述】:

我在 Linux 平台上使用阻塞 BOOST ASIO 套接字。 在一些 read() 操作中,我看到了 500+ 毫秒的巨大延迟。 (通常延迟很好,但如此巨大的延迟是不可接受的)

我已经使用该选项禁用了 Nagle 算法

_socket->set_option( tcp::no_delay( true) );

我尝试在互联网上搜索,似乎还有其他东西,例如 Delayed Ack 和 PUSH flag 可以确保这种延迟消失。

我使用的是 Linux,PUSH 标志设置可能在 Linux 中不可用。 不确定 BOOST 上的延迟确认设置。 (我应该使用从 boost socket 中提取的 native socket 描述符吗?)

结束这个问题,延迟来自接收方。 客户端和服务器之间实现的底层协议是这样的,即接收者不会给发送者一个标志来发送更多的数据包。在 TCP 级别上什么都没有。应用程序级别的实现很糟糕。

【问题讨论】:

  • 真正的问题是你用这个套接字连接什么?很可能挂断是在连接的另一端,而不是你的。
  • 你是如何测量这个延迟的?它来自哪里?
  • 您是否在 发送 端禁用了 Nagle 算法?它对接收方没有影响。您确定发送方确实发送了数据吗?
  • 尝试启用 TCP_QUICKACK,如此处答案所述:stackoverflow.com/questions/1615447/disable-tcp-delayed-acks
  • @RichardJ.RossIII 我同意你的观点,但我希望我能证明这一点。

标签: c++ linux sockets boost boost-asio


【解决方案1】:

延迟来自接收方。客户端和服务器之间实现的底层协议是这样的,接收者不会给发送者一个标志来发送更多的数据包。在 TCP 级别上什么都没有。应用程序级别的实现很糟糕。 结束这个问题。

【讨论】:

    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 2012-10-26
    • 2015-02-19
    • 2011-10-15
    • 2011-12-05
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多