在Twisted中限流HTTP客户端

3 投票
1 回答
539 浏览
提问于 2025-05-01 16:08

背景

(如果我问错了问题,请见谅)

我有一些客户和一个服务器。他们使用的应用程序是用Twisted写的。服务器需要一个简单的API,客户可以用来访问。这个API必须满足以下条件:

  • 允许进行函数调用的近似,其中最多只有一个参数,或者响应是二进制数据流
  • 支持身份验证

不过,客户端还必须能够控制它们的读写速度和与服务器的连接数量。

我考虑使用Twisted的HTTP库,虽然HTTP比我需要的复杂,但我认为它能满足我的需求,因为我可以将其与一些包装工厂结合使用,比如 twisted.protocols.policies.ThrottlingFactorytwisted.protocols.policies.LimitConnectionsByPeer

问题

似乎没有简单的方法来包装 _HTTP11ClientFactory,这个工厂是由 Agent 使用的。这样做是有原因的,因为当我尝试添加一种临时的方法来包装这个工厂时,结果出现了错误。

问题

  • 我是不是遗漏了什么?有没有简单的方法可以在客户端控制HTTP请求的速度?
  • 如果没有,是否有其他协议可以支持我的用例,或者我是否应该写一些简单的东西,这样我就可以轻松理解并应用前面提到的工厂?
暂无标签

1 个回答

2

限制HTTP请求的速度比ThrottlingFactoryLimitConnectionsByPeer所做的要复杂得多。

LimitConnectionsByPeer是用来限制服务器接收连接的速度的,所以对客户端来说帮助不大。

ThrottlingFactory应该可以用,虽然你可能需要做一些额外的工作来把它搞定,而且相关的文档可能也不太完善。如果你想要更多的帮助,最好能把你用的代码和遇到的错误一起分享出来。不过,它的作用是限制连接的速度,而不是限制发出的连接速度。要做到这一点,你需要一个客户端的端点来延迟发出连接的成功。

不过据我所知,你并没有遗漏什么。这件事可能没有看起来那么复杂,但市面上没有现成的解决方案可以直接用。而且你说得对,Twisted的HTTP客户端本来应该具备这个功能。

撰写回答