【问题标题】:Limit tcp download speed in Golang在 Golang 中限制 tcp 下载速度
【发布时间】:2018-04-25 01:19:21
【问题描述】:

我希望能够在我的代码中限制 tcp 连接的带宽。 This question 有一些线索,但不完全是我想要的。我曾尝试使用类似的方法破解 go 标准库(net/tcp 包)的 src 代码,但失败了。 我的主要想法是以某种方式将数据从系统调用缓慢写入内部缓冲区,从而使操作系统丢弃 tcp 数据包。

【问题讨论】:

  • 即使您从本地 TCP 缓冲区读取速度很慢,内核仍然可以一次获取多达/proc/sys/net/ipv4/tcp_rmem(第三个数字是最大缓冲区大小,以字节为单位)。对于长期存在的连接,您可以随时间平均它(缓冲区填充突发、消耗缓慢、缓冲区重新填充等)。要真正限制带宽,您需要在操作系统层进行,而不是在 Go 中。见unix.stackexchange.com/a/28203/40168

标签: sockets go tcp


【解决方案1】:

正如评论中所说,最简单的方法是使用 Wondershaper 工具在操作系统级别执行此操作。 如果您查看“wondershaper”脚本,它使用“iproute2”包中的“/sbin/tc”命令。 我知道这并不完全是您想要做的,但是您可以通过使用 os.exec() 在源代码中执行“tc”命令来降低级别。 实现您自己的“交通控制”算法可能工作量太大,而且对于您的目标来说不是必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2013-03-30
    • 2015-01-27
    • 2011-04-29
    • 2016-04-20
    • 2017-05-16
    • 1970-01-01
    相关资源
    最近更新 更多