我想保留一个计数器来查看有多少用户正在调用 Web 服务。 Web 服务几乎在一秒钟内完成。我可以在开始时增加一个变量并在最后减少,但这不是我想要的。
我需要在开始时增加变量并在 3 秒后减少计数。我考虑过使用缓存过期,但一秒钟内会有超过 1000 次调用,我不想给服务器或内存增加额外的负载。我也知道像 (hangfire) 这样的即发即弃方法可以工作,但在那种情况下,我需要在类中为每个请求运行计时器。
此外,此方法必须是线程安全的。我最近使用 Redis,所以如果存在这种功能,它可以成为我的解决方案。我也喜欢它。
目前我做的是: 以创建日期为开头将记录写入数据库 之后删除超过 2 秒的记录 运行程序
但这会加载数据库,我想不出一个简单的解决方案。
有什么想法吗? 谢谢。
编辑: 我制作了以下示例。继续按增量按钮,大约 90.000 你会在行中得到“对象变量未设置”错误:
Cache("x") = CInt(Cache("x").ToString) + 1
...
Imports Microsoft.VisualBasic
Imports System.Threading
Imports System.Threading.Tasks
Imports System.Web.Hosting
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub cmdIncrement_Click(sender As Object, e As EventArgs) Handles cmdIncrement.Click
For i As Integer = 1 To 10000
If Cache("x") Is Nothing Then Cache("x") = 0
Cache("x") = CInt(Cache("x").ToString) + 1
fireit()
Next
getvalue()
End Sub
Protected Sub cmdRefresh_Click(sender As Object, e As EventArgs) Handles cmdRefresh.Click
getvalue()
End Sub
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
getvalue()
End Sub
Protected Sub getvalue()
If Cache("x") Is Nothing Then Cache("x") = 0
Label1.Text = Cache("x").ToString & " - " & Now.ToString
End Sub
Protected Sub fireit()
HostingEnvironment.QueueBackgroundWorkItem(Function(token) DecrementMyVariable("aaa", token))
End Sub
Protected Shared Async Function DecrementMyVariable(text As String, token As CancellationToken) As Task(Of String)
Await Task.Delay(5000)
Dim x As Integer = CInt(HttpRuntime.Cache("x").ToString)
HttpRuntime.Cache("x") = x - 1
Return "aaa"
End Function
End Class
最佳答案
您只想将每次调用该服务的日期和时间存储到日志中。然后,您可以在给定的时间段内绘制它。将详细信息保存到 CSV 文件,您只需在 Excel 中查看数据即可。
您可以将其存储到数据库中,然后查询数据库以查找最近三秒内的所有调用。
关于asp.net - 增加计数器但随着延迟减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28947946/
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot
我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我很好奇.NET将如何影响Python和Ruby应用程序。用IronPython/IronRuby编写的应用程序是否会非常特定于.NET环境,以至于它们实际上将变得特定于平台?如果他们不使用任何.NET功能,那么IronPython/IronRuby相对于非.NET同类产品的优势是什么? 最佳答案 我不能说任何关于IronRuby的东西,但是大多数Python实现(如IronPython、Jython和PyPy)都试图尽可能忠实于CPython实现。不过,IronPython正在迅速成为这方面的佼佼者之一,并且在PlanetPyth
require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie
是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述