| 
 | 
 
最近比较闲,就顺便看看怎么能控制该死的flood。 
据说这里的限制是3秒 80cmds, 我们姑且就按这个基础设计几套flood control throttle模型 
 
模型1: 最简单最基础的模型。 Queue with delay 
顾名思义,利用mushclient自身的Queue功能, 设定delay。 我初步尝试是35-40个命令每秒 
偶尔会有flood,但是还是非常流畅。30个命令下几乎没有flood,脚本基本不会出错。 
但是多多少还是会有影响。 
结论: 
- 大部分情况下不需要throttle,急速跑效率更高
 - delay queue比较适合多步寻找,找到后原地bfs 2-3步就足够了。效率比公版单步寻找理论更好
 
 
  
 
进阶控制,计算过去3秒总共命令, 预测快到flood点把queue设成delay模式 
计算3秒命令倒是不难,利用os.time 获取当前epoch值,这个是秒为单位的。 
然后利用这个值作为key存存到lua table。 等于把table当成hashmap。 
这样只要判断T(当前秒), T-1, T-2. 3个key的总值就可知道命令数量。 
然后我们再做一个模型 
 
模型2: 3 秒内大于 50个命令, 设置queue delay为30 如果小于30,queueu delay0 
效果还是很不错,虽然偶尔还会有flood,但已经非常少了。 主要发生再1秒内怼>50个命令的极端情况下。 
但是我还是不太满意,于是继续尝试第三种模式。。 
 
模型3: 过去3秒内如果>75命令, 设置queue delay为1秒,等于强破下一个命令1秒后执行。 然后1秒后恢复到queue delay0 
这种比较适合爆发性flood。 只能控制第一次爆发点。 
这种需要配合脚本在必爆发的点稍微delay下,基本也不可能flood了。 
主要也就是领悟的无止境爆发比较恶心。。。 
 
模型3还是很稳定,flood需要微调脚本部分wait 
模型2基本可以把脚本所有delay删掉,用这套throttle模型来控制 
 
但是这几个模型还是比较简单,下一步应该就是尝试自己写cmd queue with pause 
因为模型的缺点是计算的命令是放进queue的时间,而不是真正执行的时间。要知道真正执行的时间才能完美控制flood。 
那我们只能自己写queue了。。 
这个大家可以尝试下写个order table,整个放在coroutine下实现pause 和 delay两种模式 
 
 
 |   
 
评分
- 
1
查看全部评分 
 
- 
 
 
 
 
 |