昨天晚上下班前摸鱼的时候不慎听到了一个新来的服务器同事问另一个客户端同事为什么某某模块的某某按钮点击之后,自己在服务端检测错误条件(类似用户积分不足)的地方断点走不进来,客户端解释为他自己已经做了检查,保证发起请求的时候用户已经满足了条件。
“但是实际上服务器还是会做条件检查,你这样不就同一份代码写了两次吗?我懂了,你是想减轻服务器的处理压力。”
“其实也不是,我主要是想防止用户过于频繁的点击,比如用按键精灵这种的。我写代码的想法和他们不一样,其他人一般都是会把按钮禁用什么的,但我不喜欢限制用户,他想点哪里就点哪里,所以我都是保证请求都是正确的。”
差不多听到这里我本能的看了眼时间到点了,而且作为那个禁用按钮的其他人我就立刻拧包走了。不过想想还是挺奇妙的,吼吼,又学到了新的知识呢!不过回家后看某 moba 视频攻略的时候,听到了这么一段话:
有的人总总觉得他有一点个人的理解,他要把他的那个理解给实现,他的理解就是点四级跳,然后带个点金手来打架。这种理解他觉得很到位,其实没什么用的。你先把最普通的那种打法打好,再去尝试自己的想法。
有些人说可以 balabala ……
哎呀你说的东西其实别人早就想到过了,就是最后效果不好,所以没人再打。你先把最普通的推线打野打好对吧,觉得自己有想法,有个屁的想法啊!老老实实的打现在比赛最热门的那种刷钱的,那种是最好的。人家比赛都在打,说明是最优解。不说最优解吧,也是版本比较厉害的一种打法,你非要…… balabala
哎,突然有点感觉。然后又想到了当时学设计模式的时候谁说的:
其实吧设计模式就是前人这么做过了之后发现踩的雷少一点,就回头给你说你就像我这样绕来绕去,虽说绕,但是不至于被雷炸的体无完肤
突然间我感觉我一下子就觉得那个客户端其实比我还菜(大家都叫他客户端大佬,因为我很懒不喜欢花时间看同事代码,所以不知道他具体水平)!
不过说实话这个问题我以前确实没怎么深究过:就一个最普通的领取按钮,点击一下消耗账号积分获得奖励,很小的功能小到产品、交互设计师没有提出要弹出二次确认弹窗或者等待 60s 这样的指导意见,你每点一次就请求一次然后随便浮个窗把服务器返回的字段打印出来就能通过测试的小按钮,到底应该怎么做才对呢?
以前这种东西我一般都是用户的手速有多快我的请求就有多快,现在稍稍有一点追求后会给他暗中加一个 0.5s 左右的禁用,如果在这 0.5 内服务器返回兑换成功就把禁用撸掉,让手速快的用户能连续点击……
但是说白了这其实也是我自己玩了很多其他 app 之后自己总结出来的东西,大部分客户端都是选择加一个按钮禁用的,但是具体这个“版本比较厉害的一种打法”到底是什么呢?说实话还有点好奇的!
所以我才发帖问问:如果想要防止拥有单身 27 年的手速的用户通过点击按钮手动 DDoS 服务器,客户端的你是怎么处理的?
1
TomVista 2019-08-30 14:35:09 +08:00
节流防抖,另外单身 27 年算不上 ddos
|