这似乎是一个微不足道的问题,但我似乎无法确定我是如何做到这一点的。基本上,我希望能够从套接字服务器生成一个数字,该数字随时可以给出最后一分钟收到的数据包数量。我该怎么做?
我想到的可能是将一个使用当前秒作为键的字典求和,并且在接收数据包时将该值递增1,并将其上方的第二个+ 1键设置为0,但这只是看起来马虎。有什么想法吗?
答案 0 :(得分:3)
在其他语言中解决这个问题的一个常见模式是让测量的东西只是增加一个整数。然后将其留给听取客户端以确定间隔和频率。
所以你基本上不让套接字服务器知道像“分钟”这样的东西,因为这是观察者计算的一个特征。然后,您还可以支持具有不同间隔分辨率的多个侦听器。
我想你想要某种环形缓冲结构来进行滚动记录。
答案 1 :(得分:1)
对于它的价值,如果你没有每秒收到一个数据包,你上面的实现将不起作用,因为下一个第二个条目不一定会被重置为0.
无论哪种方式,通过“正确”方式执行此操作,ala日志分析,是为了保留您收到的所有查询的有限记录。所以只需将查询,收到的时间等放入数据库中,然后简单的数据库查询就可以让您在一分钟或过去的任何一分钟内使用。不过,不确定这对你来说是否太重了。
答案 2 :(得分:1)
当你说最后一分钟时,你的意思是从x:00到x:59的确切的最后一秒或最后一分钟?后者将更容易实施,并可能给出准确的结果。你有一个prev变量保存前一分钟的命中值。然后,您有一个当前值,每当有新的命中时,该值会递增。您将prev的值返回给用户。在更改分钟时,您将prev与当前和重置电流交换。
如果您想要更高的分析,您可以将分钟分成2到6个切片。每个切片都需要一个变量或列表条目。假设您有6片10秒钟。您还有一个指向当前切片的索引变量(0..5)。对于每次命中,您都会增加一个临时变量切片结束时,将index的变量值替换为temp的值,重置temp并向前移动索引。您将切片变量的总和返回给用户。