【问题标题】:how to control socket rate?如何控制套接字速率?
【发布时间】:2011-05-08 14:54:19
【问题描述】:

我想知道如何控制我的网络接口的速率,实际上我想以 32 Kbits/s 的速率接收并将接收到的数据以 1 Mbits/s 的速率发送到网络。 ...您对如何控制界面的速率有任何想法吗?....或者您知道任何可以提供帮助的技巧吗?...

提前谢谢..

【问题讨论】:

  • 网络接口速率由硬件决定。控制它需要烙铁。
  • NetLimiter 可能有帮助吗?

标签: c++ algorithm network-programming stack


【解决方案1】:

数据吞吐率和连接的波特率之间存在差异。通常,您希望波特率尽可能快(当然没有错误)。一些低级驱动程序或操作系统可能允许您对此进行控制,但这基本上是一个低级硬件/驱动程序问题。

对于数据吞吐率,限制发送很容易,只是不要调用 send() 一样快。这要求您跟踪每个时间段发送的数量并通过睡眠来限制它。

接收可以以相同的方式进行,但您必须考虑到如果有人发送的速度比您接收的速度快,则可能会出现问题。

【讨论】:

  • 我搜了一下..结果是我可以通过调整socket选项来控制吞吐量,比如SO_SNDBUF和SO_RCVBUF,表示接收和发送socket的缓冲区大小。 ..ex:如果我给出 SO_SNDBUF=16 kbit 和 16 ms 的睡眠,我可以获得 1 Mbit/s 的吞吐量......接收端的相同逻辑将正常工作......你怎么看?
【解决方案2】:

我已经完成了这个“艰难的方式”(不知道是否有更简单的方式)。具体来说,我通过控制调用 send() 和/或 recv() 的速率以及我表示愿意在每个调用中发送/接收多少数据来做到这一点。做对了需要一些数学知识,但这并非不可能。

【讨论】:

  • 我搜了一下..结果是我可以通过调整socket选项来控制吞吐量,比如SO_SNDBUF和SO_RCVBUF,表示接收和发送socket的缓冲区大小。 ..ex:如果我给 SO_SNDBUF=16 kbit 和 16 ms 的睡眠,我可以获得 1 Mbit/s 的吞吐量......接收端的相同逻辑将正常工作......你怎么看?
【解决方案3】:

你可以这样做,你必须只控制时间,并且在第二次和发送时相同的练习中携带不超过32kbits的recv(你可以在函数参数中设置这个)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2022-01-15
    • 2018-12-24
    相关资源
    最近更新 更多