Сокет потоковой передачи, подсчет байтов и таймеры - PullRequest
1 голос
/ 05 ноября 2011

Я делаю несколько классов для IRC бота с PHP.В идеале бот должен быть защитным каналом, чтобы пнуть и запретить нарушителей.

Теперь у меня есть хорошая идея о том, как сделать большинство вещей (матерные слова соответствуют, все заглавные буквы и т. Д.).Но наиболее важными являются средства управления потоком.

Я хочу посмотреть, будет ли пользователь печатать, скажем, 5 строк текста за 3 секунды или пользователь вводил более 220 байтов текста менее чем за 3 секундыбот примет меры.Это все, конечно, получено в сокетах, в которых я не очень острый.

Примеры:

Поток строк

[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!*

Поток байтов

[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*

Итак, вопрос: Как рассчитать, если определенный ввод произошел X раз в Y секунд, а также как подсчитать, если другой определенный ввод был X байтов (накопительный) был отправлен в течение Y секунд?

Мой код по сокету аналогичен Здесь

1 Ответ

1 голос
/ 05 ноября 2011

Если вы хотите рассчитать суммы по размеру и времени, вам необходимо прежде всего сохранить связанные данные, с которыми вы хотите произвести вычисления.

Например, каждый раз, когда пользователь что-то вводит:

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

Для простоты примера я использую массив. Если вы также хотите отслеживать повторение, вам необходимо также сохранить введенные данные / или сравнить их с последними введенными пользователем данными и посмотреть, совпадают ли они.

Затем вы можете использовать этот массив для вычисления значений и проверки того, что вы ищете.

Вы также можете после того, как вы сделали это, удалить все записи из этого массива, которые старше минуты или около того, чтобы сохранить этот список маленьким.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...