【问题标题】:What happens when UDP socket isn't read fast enough?当 UDP 套接字读取速度不够快时会发生什么?
【发布时间】:2011-04-17 22:09:27
【问题描述】:

可能会发生两种情况:

  • 旧数据通过某种循环算法被新数据覆盖
  • 简单地丢弃新数据,将旧数据留在缓冲区中

还是有其他事情发生?

编辑:

我真的很想在这方面获得一些实践经验,关于 TCP 的建议或纯粹的猜测也是我可以提供给自己的 :)

【问题讨论】:

  • 取决于您的需要,但如果您确实需要可靠传输,请使用 TCP。在 Internet 上测试 10-15 个跃点的 UDP,每 100 个数据包丢失非常非常大约 1 个数据包,这只是每秒一个数据包。
  • @Erik - 传输流很少以这种方式使用 - 仅在封闭的服务器到机顶盒和局域网中。
  • 另一方面,我从未在 LAN 上丢失过 UDP 数据包。不过,它可能会发生。

标签: .net sockets udp


【解决方案1】:

一旦套接字缓冲区已满,较新的数据包开始被丢弃。

【讨论】:

    【解决方案2】:

    这也取决于硬件缓冲区。如果它已满,则数据包也将被忽略(= 就好像它从未到达设备一样,等效于 IP 堆栈中的软件缓冲区读取速度不够快)。两个缓冲区都可以独立完成。换句话说,您可以在两个级别上松散一个数据报。

    【讨论】:

      【解决方案3】:

      简短的回答是您会丢失一些 UDP 数据包。我希望您选择了 UDP,因为可以忍受一些数据丢失。如果你不能,那么 TCP 就是答案。

      (你可以只是松散数据,没问题,或者实现你自己的确认协议来重新发送数据包,但是 TCP 看起来像答案)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-23
        • 2011-01-01
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多