当前位置: 首页 > news >正文

机械设计网seo快速排名服务

机械设计网,seo快速排名服务,wordpress wp-postviews插件,南康网站建设Microsoft.AspNetCore.RateLimiting 中间件提供速率限制(限流)中间件。 它是.NET 7 以上版本才支持的中间件,刚看了一下,确实挺好用,下面给大家简单介绍一下: RateLimiterOptionsExtensions 类提供下列用…

Microsoft.AspNetCore.RateLimiting 中间件提供速率限制(限流)中间件。

它是.NET 7 以上版本才支持的中间件,刚看了一下,确实挺好用,下面给大家简单介绍一下:

RateLimiterOptionsExtensions 类提供下列用于限制速率的扩展方法:​​​​​

  • 固定窗口限制器
  • 滑动窗口限制器
  • 令牌桶限制器
  • 并发限制器

固定窗口限制器

AddFixedWindowLimiter 方法使用固定的时间窗口来限制请求。 当时间窗口过期时,会启动一个新的时间窗口,并重置请求限制。

滑动窗口限制器

滑动窗口算法:

  • 与固定窗口限制器类似,但为每个窗口添加了段。 窗口在每个段间隔滑动一段。 段间隔的计算方式是:(窗口时间)/(每个窗口的段数)。
  • 将窗口的请求数限制为 permitLimit 个请求。
  • 每个时间窗口划分为一个窗口 n 个段。
  • 从倒退一个窗口的过期时间段(当前段之前的 n 个段)获取的请求会添加到当前的段。 我们将倒退一个窗口最近过期时间段称为“过期的段”。

令牌桶限制器

令牌桶限制器与滑动窗口限制器类似,但它不会结存从过期段获取的请求数,而是在每个补充期间添加固定数量的令牌。 每个段添加的令牌数不能使可用令牌数超过令牌桶限制。 下表显示了一个令牌桶限制器,其中令牌数限制为 100 个,补充期为 10 秒。

并发限制器

并发限制器会限制并发请求数。 每添加一个请求,在并发限制中减去 1。 一个请求完成时,在限制中增加 1。 其他请求限制器限制的是指定时间段的请求总数,而与它们不同,并发限制器仅限制并发请求数,不对一段时间内的请求数设置上限。

        以上介绍是参照微软学习文档,相当枯燥无味,简单总结就是以上限制器都是为了限制客户端频繁请求接口,从而导致服务器压力过大的措施,比如可以防止dos攻击。具体实现直接看代码会比较清楚:

var builder = WebApplication.CreateBuilder(args);builder.WebHost.ConfigureKestrel((context, serverOptions) =>
{serverOptions.Listen(IPAddress.Any, 5000);
});builder.Services.AddRateLimiter(configureOptions =>
{//固定窗口限制器configureOptions.AddFixedWindowLimiter("fixed", options =>{//options.QueueLimit = 1;options.PermitLimit = 3;options.Window = TimeSpan.FromSeconds(10);options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;});//滑动窗口限制器configureOptions.AddSlidingWindowLimiter(policyName: "sliding", options =>{options.PermitLimit = 3;options.Window = TimeSpan.FromSeconds(10);options.SegmentsPerWindow = 1;options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;//options.QueueLimit = 1;});//令牌桶限制器configureOptions.AddTokenBucketLimiter(policyName: "token", options =>{options.TokenLimit = 3;options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;//options.QueueLimit = 1;options.ReplenishmentPeriod = TimeSpan.FromSeconds(10);options.TokensPerPeriod = 2;options.AutoReplenishment = true;});//并发configureOptions.AddConcurrencyLimiter("ConLimit", options =>{options.QueueLimit = 10; //达到并发限制进入队列排队的数量,多余会被丢弃options.PermitLimit = 200;//并发请求最大数量options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;});
});// Add services to the container.
//builder.Services.AddRazorPages();
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();var app = builder.Build();// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{app.UseExceptionHandler("/Error");// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.app.UseHsts();                
}
app.UseSwagger();
app.UseSwaggerUI(c => { });app.UseHttpsRedirection();
//app.UseStaticFiles();
//app.UseRouting();app.UseAuthorization();//app.MapRazorPages();
app.MapControllers();//使用限制器
app.UseRateLimiter();//固定窗口限制器
static string GetTicks() => DateTime.Now.ToString("HH:mm:ss");
app.MapGet("/fixed", () => Results.Ok($"固定窗口限制器 {GetTicks()}")).RequireRateLimiting("fixed");
//滑动窗口限制器
app.MapGet("/sliding", () => Results.Ok($"滑动窗口限制器 {GetTicks()}")).RequireRateLimiting("sliding");
//令牌桶限制器
app.MapGet("/token", () => Results.Ok($"令牌桶限制器 {GetTicks()}")).RequireRateLimiting("token");
//并发限制器
app.MapGet("/ConLimit", () => Results.Ok($"并发限制器 {GetTicks()}")).RequireRateLimiting("ConLimit");app.Run();

核心代码就这些:

运行程序,请求http://localhost:5000/fixed ,如果10s内请求大于3次就失败:

10秒后又可以正常访问:

对指定接口进行限制,只需要在指定接口上使用EnableRateLimiting特性就行:

[EnableRateLimiting("sliding")]
[HttpGet]
public string GetString()
{return "111";
}

10秒内请求超3次就失败:

注意上面的 options.QueueLimit 被我注释了,这个主要是设置排队的请求的最大累计允许计数,如果设置了就不会报错而是等待请求,数值是具体可以同时等待的请求数。

http://www.hkea.cn/news/875902/

相关文章:

  • 做网站选什么系统企业网站seo推广
  • 山东省南水北调建设管理局网站腾讯网qq网站
  • 菏泽做网站公司sem网络营销
  • 专业建站外包兰州网络优化seo
  • 企业邮箱腾讯杭州seo按天计费
  • 政府网站建设先进个人事迹互动营销
  • 网站建设之织梦模板做国外网站
  • 小程序电商模板seo关键词排名优化品牌
  • 泉州网站优化排名百度关键字优化价格
  • 上海网站建设好处win优化大师官网
  • 适合毕设做的简单网站初学seo网站推广需要怎么做
  • 想把书放到二手网站如何做深圳seo关键词优化
  • 合肥网站优化排名推广合理使用说明
  • 如何网站专题策划互联网推广是什么
  • 用hadoop做网站日志分析推广工作的流程及内容
  • 凡科做网站技巧站长之家域名信息查询
  • 网站建设国际深圳网络营销课程ppt
  • 网站开发人员需要具备的能力电脑培训班多少费用
  • discuz集成wordpressseo的概念是什么
  • 子网站如何做网站营销方案模板
  • dreamweaver做的网站电商培训班一般多少钱
  • 国外做科研的网站东莞网站设计公司排名
  • 亿唐网不做网站做品牌原因seo网站诊断报告
  • 宝鸡网站建设东东怎么推广软件让别人下载
  • 21dove谁做的的网站百度一下首页设为主页
  • 猪八戒网站建设推广平台排名前十名
  • 广西建设质监站官方网站站长工具seo综合查询可以访问
  • 通用搭建网站教程优化营商环境的意义
  • 网站中加入地图怎样优化网站排名
  • 网站如何被搜索引擎收录地推推广平台