套接字流,字节数和定时器

时间:2011-11-05 09:22:48

标签: php sockets

我正在使用PHP为IRC bot制作几个类。机器人理想情况下是一个通道保护机器人,可以踢和禁止违法者。

现在,我对如何做大多数事情都有一个好主意(发誓单词匹配,全部大写等)。但最重要的是洪水控制。

我想看看用户是否在3秒内键入5行文本,或者如果用户在3秒内输入超过220字节的文本,则机器人将采取措施。这一切都是在插座中收到的,我不是很犀利。

示例:

线路泛滥

[11:17:00] <user1> Hey!
[11:17:00] <user1> Hey!
[11:17:00] <user1> Hey!
[11:17:11] <user1> Hey!
[11:17:11] <user1> SPAAAAAACE!
*Line flood detected!*

Byte flood

[11:17:00] <user1> Hey! this is a very long long text.
[11:17:00] <user1> and I pasted it from a file or something so that these lines all occur one after another with 0 time
[11:17:00] <user1> This should be considered a byte flood since it's so very looooooooooooooong.
*byte flood detected overall counted bytes in the last 3 seconds from user1 is too much*

所以问题:如果在Y秒内发生某个输入X时间怎么计算,如果在Y秒内发送了另一个特定输入是X字节(累积),我该如何计算? ?

我的代码类似套接字 Here

相似

1 个答案:

答案 0 :(得分:1)

如果要计算大小和时间的总和,首先需要存储要进行计算的相关数据。

例如,每次用户输入内容时:

$store[] = array('user' => $user, 'len' => strlen($data), 'time' = now());

为了使示例简单,我正在使用数组。如果您还想跟踪重复,您还需要存储输入的数据/和/或与用户最后输入的数据进行比较,看它是否相同。

然后,您可以使用此数组计算值并检查您要查找的内容。

您也可以在删除该数组中超过一分钟左右的所有条目后,将该列表保持较小。