前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dingo Api 的限流在Laravel的限流基础上做了哪些修改?

Dingo Api 的限流在Laravel的限流基础上做了哪些修改?

作者头像
写PHP的老王
发布2019-08-12 15:39:20
1.5K0
发布2019-08-12 15:39:20
举报
文章被收录于专栏:写PHP的老王写PHP的老王

今天看文档的时候看到 Laravel的 节流限速 (throttling) 。网络上搜索,又看到了Dingo 的节流限速的文档。因此查看Laravel 与Dingo的源码,对比两者之间的相同点与不同点。

相同点

两者都是通过中间件处理请求限流

处理方式都是记录缓存key,设置过期时间,在没过期的时候自增,直到超出限制,或key过期

Laravel 限流中间件 Illuminate\Routing\Middleware\ThrottleRequests

Dingo 限流中间件Dingo\Api\Http\Middleware\RateLimit

不同点

从上面两个中间件的代码可以看出,Laravel只有再没有超过限制的情况下才会对缓存进行+1操作,而Dingo是先操作再进行判断

Dingo 限制key以请求路径hash为前缀,默认以用户ip作为key。因此可以实现对用户每个url的限制,限制粒度更细

Dingo\Api\Http\RateLimit\Handler代码如下:

Laravel 中使用用户信息或域名+ip作为限制key,限制粒度只在用户级别

Illuminate\Routing\Middleware\ThrottleRequests代码如下:

Dingo支持修改限制key,Laravel默认没有支持修改方法

Dingo支持添加多个限制规则,逻辑上使用限制数最小的进行判断。

假设有两个限制器,且都符合限制条件。一个限制1分钟10次,另一个限制2分钟15次,会使用1分钟1次的进行限制判断。

Dingo 返回了过期限制到期时间,Laravel默认不返回限制到期时间

Dingo\Api\Http\RateLimit\Handler获取限制最少的限制器代码如下:

Dingo\Api\Http\RateLimit\Handler获取设置的返回头信息代码如下:

Illuminate\Routing\Middleware\ThrottleRequests获取设置的返回头信息代码如下:

总结

两者实现原理相同,只是在细节上Dingo的功能更加强大。Dingo 限制粒度更细,限制规则上,可扩展性,灵活性都比Laravel强。

两者都是通过中间件处理请求限流。处理方式都是记录缓存key,设置过期时间,在没过期的时候自增,直到超出限制,或key过期。

Laravel只有再没有超过限制的情况下才会对缓存进行+1操作,而Dingo是先操作再进行判断;Dingo 限制key以请求路径hash为前缀,默认以用户ip作为key,限制粒度更细。Dingo支持修改限制key,Laravel默认没有支持修改方法;Dingo支持添加多个限制规则。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 写PHP的老王 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相同点
  • 不同点
  • 总结
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档