【发布时间】:2010-10-02 15:13:29
【问题描述】:
这似乎是一个微不足道的问题,但我似乎无法确定我想怎么做。基本上,我希望能够从套接字服务器生成一个数字,它可以随时给出最后一分钟收到的数据包数量。我该怎么做?
我在考虑可能对一个使用当前秒作为键的字典求和,当接收到一个数据包时,它会将该值加一,并将其上方的第二+1 键设置为 0,但这似乎邋遢。有什么想法吗?
【问题讨论】:
标签: python
这似乎是一个微不足道的问题,但我似乎无法确定我想怎么做。基本上,我希望能够从套接字服务器生成一个数字,它可以随时给出最后一分钟收到的数据包数量。我该怎么做?
我在考虑可能对一个使用当前秒作为键的字典求和,当接收到一个数据包时,它会将该值加一,并将其上方的第二+1 键设置为 0,但这似乎邋遢。有什么想法吗?
【问题讨论】:
标签: python
在其他语言中解决这个问题的一个常见模式是让被测量的东西简单地增加一个整数。然后你把它留给监听客户端来确定间隔和频率。
所以你基本上不让套接字服务器知道诸如“分钟”之类的东西,因为这是观察者计算的特征。那么你也可以支持多个不同间隔分辨率的监听器。
我想你想要某种环形缓冲区结构来进行滚动日志记录。
【讨论】:
当您说最后一分钟时,您是指确切的最后几秒还是从 x:00 到 x:59 的最后一整分钟?后者将更容易实现,并且可能会给出准确的结果。您有一个 prev 变量保存前一分钟的点击值。然后你有一个当前值,每次有新的命中时都会增加。您将 prev 的值返回给用户。在分钟更改时,您将 prev 与 current 和 reset current 交换。
如果您想要进行更高级别的分析,您可以将一分钟分成 2 到 6 个切片。每个切片都需要一个变量或列表条目。假设您有 6 片 10 秒。您还有一个指向当前切片 (0..5) 的索引变量。对于每次点击,您都会增加一个临时变量。当切片结束时,您将索引变量的值替换为 temp 的值,重置 temp 并向前移动索引。您将切片变量的总和返回给用户。
【讨论】:
不管怎样,如果您不是每秒都收到一个数据包,上述实现将无法正常工作,因为下一秒条目不一定会重置为 0。
无论哪种方式,afaik 执行此操作的“正确”方法,ala 日志分析,是保留您收到的所有查询的有限记录。因此,只需将查询、接收时间等放入数据库,然后简单的数据库查询将在一分钟内或过去的任何一分钟内为您提供使用。不过,不确定这对你来说是否太重量级了。
【讨论】: