首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

.Net 如何模拟会话级别的信号量,对http接口调用频率进行限制(有demo)

现在,因为种种因素,你必须对一个请求或者方法进行频率上的访问限制。 比如, 你对外提供了一个API接口,注册用户每秒钟最多可以调用100次,非注册用户每秒钟最多可以调用10次。 比如, 有一个非常吃服务器资源的方法,在同一时刻不能超过10个人调用这个方法,否则服务器满载。 比如, 有一些特殊的页面,访客并不能频繁的访问或发言。 比如, 秒杀活动等进行。 比如 ,防范DDOS,当达到一定频率后调用脚本iis服务器ip黑名单,防火墙黑名单。 如上种种的举例,也就是说,如何从一个切面的角度对调用的方法进行频率上的限制。而对频率限制,服务器层面都有最直接的解决方法,现在我说的则是代码层面上的频率管控。

02

理解分布式会话

会话 Session 代表的是客户端与服务器的一次交互过程,这个过程可以是连续也可以是时断时续的。早期的 Servlet时代(jsp),一旦用户与服务端交互,服务器 tomcat 就会为用户创建一个 session,同时前端会有一个 jsessionid,每次交互都会携带。如此一来,服务器只要在接到用户请求时候,就可以拿到 jsessionid,并根据这个ID在内存中找到对应的会话 session,当拿到 session 会话后,那么我们就可以操作会话了。会话存活期间,我们就能认为用户一直处于正在使用着网站的状态,一旦 session 超期过时,那么就可以认为用户已经离开网站,停止交互了。用户的身份信息,我们也是通过session 来判断的,在 session 中可以保存不同用户的信息。

02

Gopher:Redis的礼物

十年前,Redis在Hacker News上宣布,我将其作为项目的虚拟生日,仅仅因为它比公告第一行代码的实际日期更为重要(想想它的概念) VS实际出生的动物)。我会用十年的Redis作为借口来释放我前几天玩过的东西,想把它用在4月1日那个傻瓜身上:但是这个日期已经很远了我现在想和你谈谈这个项目......所以,Redis生日快乐!这是你现在的:Gopher协议实现。 [...这里Redis试图阻止眼泪,但情绪太强烈,地板上有点(我的意思是零和一些)...] WTF你在说什么?!应该是你的自动问题。Gopher在2019年听起来有点奇怪。然而,这不仅仅是一个笑话,而是一个笑话。毕竟,实现只有100行代码,不包括将页面呈现为Redis键的外部工具。但是......事实上,Gopher周围真的有一个活跃的社区,这是一个非常小的,但是在最近几年和几个月里都在增长。有些人认为互联网不再像过去那样。有太多的控制,公司跟踪,评论,喜欢,转推,以至于内容不再是王者。一个人写新东西让他们流行5个小时并消失。已经不再讨论可以存活超过几分钟而不会变成某种火焰,除非所有各方都自我审查每一种可能的感觉,不安的言辞和信念,以至于使讨论毫无用处。最后加载一个带有1k文本的愚蠢页面需要加载50个javascript文件,以便看到屏幕闪烁,因为客户端渲染很酷,等等。 另一方面,Gopher是一个纯文本协议,非常适合提供只有文字的文档,其中压力在于你所写的内容。但那就是胎教,对我而言,Gopher的银弹就是它是UNCOOL。足够冷静,它将是永远的,AFAIK,一个替代的现实,某些人可以决定与其他人分开,体验不同的做事方式,更类似于旧时代的BBS或互联网的头几年。一个大多数人不想只是在80列固定大小字体中阅读书呆子东西的地方。 你在Gopher中所做的就是创建你的Gopher洞,也就是你在Gopher宇宙中的空间,就像你在互联网上的网站一样。已经有不少工具可以做到这一点,但Redis非常好,原因如下:您可以更改Redis密钥以实时更改网站内容,这很方便。您可以使用复制来复制站点,甚至可以保存您的RDB文件,以便将整个Gopher漏洞的精确副本存档以备份或历史原因。 这个Redis Gopher概念是在Freaknet的合作下创建的,Freaknet是卡塔尼亚历史性的黑客实验室体验。https://it.wikipedia.org/wiki/FreakNet。 那些人做了很多有趣的事情,包括在Palazzolo Acreide的一个retrocomputing硬件博物馆项目:https://museo.freaknet.org/en/ 。 这个怎么运作? 好吧,它是微不足道的,我劫持了内联协议,特别是两种内联请求,无论如何都是非法的:空请求或任何以“/”开头的请求(没有Redis命令以这样的斜杠开头)。正常的RESP2 / RESP3请求完全不在Gopher协议实现的路径之内,并且通常也是如此。如果在启用Gopher时打开与Redis的连接并向其发送类似“/ foo”的字符串,如果有一个名为“/ foo”的键,则通过Gopher协议提供。整个实现是100行代码。最初我考虑过使用数据结构并对Gopher类型进行语义转换,但这只是复杂而无用的。 相反,我所做的是为Gopher提供Redis的创作工具,你可以在这里找到它: https://github.com/antirez/gopher2redis 要查看在Redis实例上运行的Gopher漏洞的示例,只需转到gopher://gopher.antirez.com,然后在我接下来的几天内构建一个Gopher漏洞的地址。PS我建议使用Lynx文本只有web / gopher浏览器访问Gopher。 默认情况下禁用gopher支持,以使其能够使用Redis unstable分支并使用“gopher-enabled”选项,将其设置为yes。但是,确保密码保护Redis:Gopher协议仍将提供内容,但同时无法访问正常的Redis命令。这种方式(假设您没有Gopher键以外的数据在实例中公开),您可以将实例设为公共,作为真正的Gopher服务器。 好吧,和Gopher玩得开心!我希望这个Gopher会继续前进,我真的相信我们中的一些人需要在现代互联网的混乱之外建立一个社区。不,不可能没有互动。例如,我没有计划停止写博客或使用互联网。但某些较慢质量较高的通信需要一个繁荣的地方。

03
领券