代码之家  ›  专栏  ›  技术社区  ›  Pieter

当网络过载时,qtcsocket的行为是什么?

  •  3
  • Pieter  · 技术社区  · 14 年前

    我有一个qtcsocket在一个单独的线程中发送大量数据。其中一些应用程序分布在网络上。

    如果qtcsocket开始丢弃数据,它将是哪些数据:缓冲区队列中最早的,缓冲区队列中最新的,。。。?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Pieter    14 年前

    显然没有,我只是检查了qt4.5.3的代码。调用write()时,所有数据都放在QRingBuffer中(类不是qtapi的一部分)。QAbstractData::writeData()放入数据,QAbstractData::flush()取出数据。找不到限制此缓冲区大小的检查。

        2
  •  1
  •   guruz    14 年前

    您必须通过检查socket来执行自己的“流控制”->bytesToWrite(),它告诉您Qt的缓冲区中还有多少数据(+操作系统缓冲区中还有您无法控制的额外数据)

        3
  •  0
  •   bkausbk    13 年前

    if (bytesToWrite() > 16 * 1024 * 1024) {
        // discard data
    } else {
        write(moredata);
    }
    

    bytesToWrite()表示它的发送速度。您可以检查这个值并限制datarate,以便bytesToWrite()总是返回大约相同的大小。