如何限制Python Twisted中的连接速率?
有没有办法在Python的Twisted框架中限制连接速度?我想模拟一个慢速的数据线路,包括超时和可选的数据丢失,并且使用Twisted这个框架。
2 个回答
0
这篇文章提出了三种解决方案,并讨论了其中两个可行的方案——最好的方案是使用 iptables
(或者其他同样强大灵活的防火墙软件,当然前提是你的操作系统支持这些软件,也就是说,在 twisted 之外进行数据速率限制);如果你的操作系统没有这样的能力,文章中提到的一个不太理想但可行的解决方案是
1) 在服务器上创建一个字典 {ip1:count1, ip2: count2, ...},用来记录每个连接的次数。 如果某个 IP 的连接次数超过了设定的阈值,就用 transport.loseConnection() 断开连接。 每分钟用 reactor.callLater 定时器将这个字典重置为空字典 {}。
这个方法的局限性在文章中解释为
方法(1)会先接受连接(accept()),然后再断开连接,这样对方主机会收到一个 syn/ack 的回应,接着连接就被关闭了,然后它可能会立即尝试重新连接。