V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
JJstyle
V2EX  ›  程序员

各位老友们,我又来提问了,你们的后端服务 API 有做节流(throttle)和防抖(debounce)吗?

  •  
  •   JJstyle · 2020-08-18 14:20:34 +08:00 · 2690 次点击
    这是一个创建于 1588 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先上定义:

    节流:在一段时间内,规定同一个操作最多只能运行指定次数,超出的阻止。  
    防抖:在一段时间内,规定同一个操作的多次运行只能让其中一个(一般是开始的一个或者最后一个)运行,其他的阻止。
    

    (把标题中的 API 代入到上面的操作即可。)

    搜索引擎搜索“API 节流防抖” 都是 js 相关的,求指教!

    10 条回复    2020-08-18 16:51:31 +08:00
    janxin
        1
    janxin  
       2020-08-18 14:28:19 +08:00
    你换个搜索关键词
    rate limit 和 backoff/retry
    JJstyle
        2
    JJstyle  
    OP
       2020-08-18 14:34:48 +08:00
    好吧,节流和防抖似乎只是 js 特有的关键词,我咋想不到 rate limit 呢😅,似乎找到比较有用的信息:

    https://www.nginx.com/blog/rate-limiting-nginx/
    JJstyle
        3
    JJstyle  
    OP
       2020-08-18 14:35:24 +08:00
    @janxin >#1
    JJstyle
        4
    JJstyle  
    OP
       2020-08-18 14:37:31 +08:00
    nginx 的这个用法应该还需要考虑到 NAT 环境下公共 IP 的问题
    chinvo
        5
    chinvo  
       2020-08-18 14:43:34 +08:00
    这些一般是 API 网关的工作
    chotow
        6
    chotow  
       2020-08-18 14:48:57 +08:00
    换个关键词,限流( Throttle ),后端就挺多的了吧。
    在一些不能多次处理的任务中都会用到,基本是用 Redis 锁实现。
    woomly
        7
    woomly  
       2020-08-18 16:22:57 +08:00
    没有做
    xuanbg
        8
    xuanbg  
       2020-08-18 16:44:11 +08:00
    网关上实现,根据 url 读取配置表中的接口配置数据,如果配了限流参数,就按限流参数来进行访问限制。
    Varobjs
        9
    Varobjs  
       2020-08-18 16:46:29 +08:00 via Android
    防抖真是前端的,后端叫锁
    xuanbg
        10
    xuanbg  
       2020-08-18 16:51:31 +08:00
    @xuanbg 限流参数就 2 个,分别是单位时间内可访问次数和最小时间窗口。前者如果被设置为每天 100 次,那同一个来源的请求从第一次开始计时,24 小时内超过 100 次后就会被拒绝。后者如果被设置为 3 秒,那么在第一次访问开始计时,3 秒内除第一次外的访问都会被拒绝,过了 3 秒之后,再次访问则重新开始计时。因为你不发请求就不会开始 3 秒计时,所以不会有什么 2.9 秒后只需间隔 0.1 秒的漏洞。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5175 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 05:44 · PVG 13:44 · LAX 21:44 · JFK 00:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.