标签: throttling

在将参数传递给去抖函数时限制或去抖 Vue 2 中的异步调用

我有一个 Vue 2 应用程序,它使用对象数组来支持vue-multiselect提供的搜索/多选小部件。

我已经查看了关于去抖动调用的Vue 1 -> 2 迁移指南,但是他们给出的示例没有将参数从 DOM 元素传播到业务逻辑。

现在,每次击键时 select 都会触发更改事件,但我想限制它(例如,使用 lodash#throttle),这样我就不会在他们打字时每隔几毫秒就调用我的 API。

import {mapGetters} from 'vuex';
import { throttle } from 'lodash';

import Multiselect from 'vue-multiselect'

export default {
  components: {
    Multiselect
  },
  data() {
    return {
      selectedWork: {},
      works: [],
      isLoading: false
    }
  },
  computed: {
    ...mapGetters(['worksList']),
  },
  methods: {
    getWorksAsync: throttle((term) => {
      // the plan is to replace this with an API call
      this.works = this.worksList.filter(work => titleMatches(work, term));
    }, …
Run Code Online (Sandbox Code Playgroud)

javascript throttling vue.js vuejs2

5
推荐指数
1
解决办法
8862
查看次数

如何在 RxJS 中进行不同的节流

我花了几天时间,但找不到在 RxJS 中进行“独特节流”的方法。

\n\n

假设每个事件在 4 个破折号内完成,“不同的节流阀”将执行如下:

\n\n

-\xe2\x91\xa0-\xe2\x91\xa1-\xe2\x91\xa0---------\xe2\x91\xa0-----|->

\n\n

[独特的油门]

\n\n

-\xe2\x91\xa0-\xe2\x91\xa1-------------\xe2\x91\xa0-----|->

\n\n

如何使用现有的 RxJS 运算符来构建“独特的节流阀”?

\n

throttling rxjs

5
推荐指数
1
解决办法
835
查看次数

Tomcat(和 Spring REST)的速率限制/节流

我现在读了很多帖子,仍然无法充分解决我的问题:

如果运行带有 Spring Rest 后端的 Tomcat Web 服务器,则有应该必须是一种限制每秒/分钟/...可能的请求的方法,例如基于请求者的 IP。到目前为止,我的调查得出了以下可能性:

  1. 使用 Guava RateLimiter 或https://github.com/weddini/spring-boot-throttle并检查 preHandle 中的所有请求。但由于这没有考虑在什么时间请求哪些 IP,因此像 REDIS 存储之类的东西进行检查(IP/上次访问时间戳)会更有意义
  2. 在提供此功能的 tomcat 前面放置一个更高级的 Web 服务器(例如 apache2 或 nginx)

现在我不喜欢第一个解决方案,因为请求已经到达应用程序本身,而第二个解决方案构建了一个附加层,我真的不相信这对于这样一个基本问题是必要的。

所以我的问题是,我在这里缺少哪些方法和解决方案?我读过一些有关 tomcat Valve semaphore 的内容,但它似乎只是限制了请求的总体速率。在 8443 端口上使用一些基本功能(如 iptables 或fail2ban)进行过滤并在给定时间范围内简单地删除同一 ip 的请求是否是最有效/可能的?

spring tomcat throttling server

5
推荐指数
0
解决办法
3429
查看次数

在 NextJS 中实施速率限制

我学习了 ReactJS 和 NextJS,但在 NextJS 中实现速率限制/节流时遇到了困难。我希望限制用户在一段时间内访问某些请求的次数。

throttling node.js reactjs next.js

5
推荐指数
1
解决办法
2万
查看次数

AWS API Gateway 限制未按预期工作

我正在尝试启用 API 网关限制,但它没有按预期工作。

我将默认方法限制速率设置为每秒 1 个请求,并将突发设置为 1 个请求。

在此输入图像描述

然后,我在代码中创建了一个循环,向我的 API 端点同时发出 10 个请求。

for (let i=0; i<10; i++) {
    axios.get(url);
}
Run Code Online (Sandbox Code Playgroud)

预期结果是:

  • 1 成功请求
  • 9 个受限制的请求(HTTP 429 错误)

但实际结果却恰恰相反:

  • 9 成功请求
  • 1 个受限制的请求(HTTP 429 错误)

我重复了该过程,但同时发出 20 个请求,结果是:

  • 16 次成功请求
  • 4 个受限制的请求(HTTP 429 错误)

在该 API 方法的 CloudWatch 日志中,我发现了不同的日志流,每个日志流只有几毫秒的差异。

在此输入图像描述

如果我将速率设置为每秒 0 个请求并将突发设置为 0 个请求,则限制将起作用并且所有请求都会受到限制。但是当我将 Rate 和 Bust 设置为 1 时,它无法按预期工作。

为什么会发生这种情况?我需要将 API 限制为每秒仅 1 个请求。

throttling amazon-web-services aws-lambda aws-api-gateway

5
推荐指数
1
解决办法
4127
查看次数

如何在 Django 中渐进式登录速率限制?

我正在开发一个 Django/DRF 应用程序,并且正在尝试实现一个 API 限制,该限制对于失败的登录尝试会产生越来越长的延迟。

例如。在 3 次失败尝试后将用户锁定 1 分钟,在 6 次失败后锁定用户 10 分钟,在 9 次失败后锁定用户 30 分钟等,类似于手机的操作以及一般登录页面的常见操作。我惊讶地发现,考虑到登录场景的普遍性,Django 或 DRF 中似乎没有内置渐进式节流阀......

DRF 油门选项:

Django Rest FrameworkAPIView提供了一个throttle_classes字段和一个get_throttles()方法,并且它有一些用于执行固定速率油门延迟的通用油门。我可以通过添加限制列表来模拟渐进速率,如下所示:

def get_throttles(self):
    return [
        MyCustomThrottle('3/m'),
        MyCustomThrottle('6/10m'),
        MyCustomThrottle('9/30m'),
    ]
Run Code Online (Sandbox Code Playgroud)

然后添加一个自定义get_cache_key()方法,MyCustomThrottle该方法返回一个不会与列表中其他节流阀冲突的唯一键。

这几乎是有效的——它可以阻止刚刚踩油门的机器人——但是,它有几个问题:

  1. 如果/当用户成功登录时,DRF 限制没有一种简单的方法可以清除限制列表。我通过手动修改 DRF 节流使用的缓存来解决这个问题,但这并不理想......

  2. DRF 节流阀在请求循环中的某个点触发,并且该点可能会也可能不会发生身份验证 - 因此节流阀可能不知道传入的凭据是否良好:

    答:如果通过APIView.authentication_classes现场进行身份验证,则身份验证发生在节流阀之前,然后节流阀可以知道身份验证是否成功并可以采取相应的行动。这样做的缺点是每个机器人请求都会导致数据库命中。

    B. 如果在视图代码中进行身份验证,则身份验证会在触发限制后发生。缺点是节流器不知道传入的信用是否良好,但优点是机器人在数据库受到攻击之前被阻止。

我们的应用程序正在执行选项 B,因为我们也在实施 2FA(也许有一种方法可以通过 2FA 进行authentication_classes,但这就是今天的情况......)并且因为我们希望以最少的 DB 攻击来阻止机器人。 选项 B 有点排除了 DRF 限制,因为边缘情况会导致糟糕/令人困惑的用户体验。

其他选项: …

authentication django throttling django-rest-framework

5
推荐指数
1
解决办法
550
查看次数

如何为Perl Web服务实现服务器端速率限制?

我有一个基于Perl的CGI /快速CGI Web服务,并希望通过IP地址对客户端进行速率限制,以阻止侵略性客户端造成太多工作.

我查看了一些代码并在CPAN中找到了Algorithm :: TokenBucket,但这是针对客户端请求的; 它没有持久性,没有每用户配置,因此对服务器端速率限制没有用.

我正在寻找已经存在的东西的建议,否则我需要基于一些简单的持久性来自行推送,例如绑定到DB_File每IP地址和一些执行令牌管理的批处理作业.

perl cgi throttling

4
推荐指数
1
解决办法
1529
查看次数

WCF:如何将ServiceThrottlingBehavior添加到WCF服务?

我有以下代码返回我的WCF服务的实例ServiceClient:

    var readerQuotas = new XmlDictionaryReaderQuotas()
    {
        MaxDepth = 6000000,
        MaxStringContentLength = 6000000,
        MaxArrayLength = 6000000,
        MaxBytesPerRead = 6000000,
        MaxNameTableCharCount = 6000000
    };


    var throttlingBehaviour = new ServiceThrottlingBehavior(){MaxConcurrentCalls=500,MaxConcurrentInstances=500,MaxConcurrentSessions = 500}; 
    binding = new WSHttpBinding(SecurityMode.None) {MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};

    dualBinding = new WSDualHttpBinding(WSDualHttpSecurityMode.None)
                      {MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};

    endpointAddress = new EndpointAddress("http://localhost:28666/DBInteractionGateway.svc"); 

    return new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), dualBinding, endpointAddress);
Run Code Online (Sandbox Code Playgroud)

最近我遇到了超时问题,所以我决定添加一个限制行为,比如:

    var throttlingBehaviour = new ServiceThrottlingBehavior () {
        MaxConcurrentCalls=500, 
        MaxConcurrentInstances=500,
        MaxConcurrentSessions = 500
    }; 
Run Code Online (Sandbox Code Playgroud)

我的问题是,在上面的代码中我应该将它添加throttlingBehaviour到我的 …

c# wcf web-services throttling

4
推荐指数
2
解决办法
1万
查看次数

在VBA中节流

背影故事

不久前,我被问到是否可以在内部实施大规模电子邮件解决方案,以便我们能够更好地控制敏感信息.我提出了一个两步计划:在Excel/VBA/CDO中开发原型以便用户熟悉,然后分阶段.Net/SQL服务器解决方案以提高速度和稳健性.

什么改变了

进入第二阶段的3个月,管理层决定继续将电子邮件营销外包给另一家公司,这很好.第一个问题是管理层没有对公司采取行动,所以我仍然没有义务让当前的原型工作.

仍然,原型工作,或至少它的确如此.第二个问题出现在我们的Exchange 2003中继服务器与Exchange 2010交换时.事实证明,默认情况下更多的"安全"功能就像限制策略一样被转换,我一直在帮助系统管理员解决服务器配置的问题.发生的事情是,发送+100电子邮件后,服务器开始拒绝发送请求,并出现以下错误:

The message could not be sent to the SMTP server. The transport error code is 0x800ccc67. 
The server response was 421 4.3.2 The maximum number of concurrent connections has exceeded a limit, closing transmission channel
Run Code Online (Sandbox Code Playgroud)

不幸的是,我们只能在Marketing发送内容时测试服务器配置,大约每月一次.

下一步是什么?

我正在查看Excel的VBA定时器功能,以帮助限制我的主循环泵,以帮助限制发送请求.这里的第三个问题是,从我从阅读中理解的是,我能得到的最佳精度是1秒钟的计时器.与我们发送的5封电子邮件/秒相反,每秒1封电子邮件会相当长(大约4倍-5倍).这使得3小时的流程变成了一整天的流程,超过了工作人员的可用时间.我想我可以通过每秒发送5封电子邮件来反转速率,但是如果定时器具有更高的精度,则产生更多的突发影响而不是稳定速率.在我看来,这会创建一个不太受控制的过程,我不确定服务器将如何处理突发而不是稳定的速率. 我有什么选择?

email vba throttling exchange-server-2010

4
推荐指数
1
解决办法
1154
查看次数

如何在javascript中从debounced函数返回值?

我有这样的代码:

var originalFunction = function() {
    return 'some value';
};

var debouncedFunction = _.debounce(originalFunction, 3000);

console.log('debouncedFunction() result: ', debouncedFunction());

console.log('originalFunction() result: ', originalFunction());
Run Code Online (Sandbox Code Playgroud)

(codepen链接)

控制台的结果是:

debouncedFunction() result:  undefined 

originalFunction() result:  some value
Run Code Online (Sandbox Code Playgroud)

如您所见,去抖动功能不会返回任何内容.据我所知,它是由去抖动功能中的内部定时器引起的,但它是否存在?

javascript jquery throttling underscore.js debouncing

4
推荐指数
1
解决办法
4544
查看次数