找回密码
 注册
搜索
查看: 1196|回复: 14

Throttling! flood control

[复制链接]
门派:桃花岛
发表于 2020-2-23 12:54:49 | 显示全部楼层 |阅读模式
最近比较闲,就顺便看看怎么能控制该死的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

查看全部评分

门派:桃花岛
 楼主| 发表于 2020-2-23 12:59:32 | 显示全部楼层
还有一个遗憾就是lua os time精度只有秒
这就让控制delay没办法做的更细微。。
可能lua可以做到ms级别时间但是我不知道吧。。。
门派:桃花岛
发表于 2020-2-23 13:01:04 | 显示全部楼层
交给服务器效果可能是最佳的
门派:桃花岛
发表于 2020-2-23 13:03:49 | 显示全部楼层
zruo@tj 发表于 2020-2-23 12:59
还有一个遗憾就是lua os time精度只有秒
这就让控制delay没办法做的更细微。。
可能lua可以做到ms级别时 ...

network latency也要考虑吧
门派:桃花岛
 楼主| 发表于 2020-2-23 13:07:45 来自手机 | 显示全部楼层
aws@tj 发表于 2020-2-23 13:03
network latency也要考虑吧

并不需要,我只需要计算用户输入命令
latency用walk wait alias或者busy check 的beibeibei
这两种需要服务器反馈的方式就是控制latency的问题
这么说,如果实在太慢,脚本反而没办法进行下一步,也就没有命令输入了
只会挤压0.1-0.4秒一个的alias or bei
这些并不怕flood
门派:明教
发表于 2020-2-23 17:33:10 | 显示全部楼层
alias下的指令数怎么精确统计?            
门派:明教
发表于 2020-2-23 17:35:00 | 显示全部楼层
上了你的lua后,跑得快多了,flood也多了,最近在大雪山精进渣仓附近遇到flood,反复flood,每次都吞开头部分,导致卡那里10多20秒,最后总算走出来了。
门派:桃花岛
 楼主| 发表于 2020-2-23 17:53:43 | 显示全部楼层
kkfromch@tj 发表于 2020-2-23 17:33
alias下的指令数怎么精确统计?

这个没有办法,还好公版alias不算多。sxlian 可以每次生成的时候计算下,其他都是战斗的永远不会flood。。无视
门派:明教
发表于 2020-2-23 17:57:14 | 显示全部楼层
zruo@tj 发表于 2020-2-23 17:53
这个没有办法,还好公版alias不算多。sxlian 可以每次生成的时候计算下,其他都是战斗的永远不会flood。 ...

问题我定制版,走路都是alias啊!哭。。。
门派:明教
发表于 2020-2-23 17:57:45 | 显示全部楼层
kkfromch@tj 发表于 2020-2-23 17:57
问题我定制版,走路都是alias啊!哭。。。

优化走路,不是我强项,想搞也不知道怎么搞?              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-8-14 08:27 , Processed in 0.082564 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表