2015-01-08 3 views
0

Мне нужен способ ограничить количество сообщений на моем ботре IRC, чтобы избежать глобального запрета от подергивания для наводнения в чате. (Они позволяют 100 сообщений/30 секунд)Создание очереди сообщений IRC

Есть два способа, которые я рассматривал, делая это с участием очереди сообщений.

  1. Каждое сообщение начинает поток, который принимает счетный семафор. Затем этот поток блокируется на 30 секунд и освобождается после этого времени. Это будет очень чистое решение, так как очередь будет полностью управляться ОС, что означает меньше работы для меня, однако это может привести к созданию сотен потоков. Эти потоки будут спать большую часть своей жизни, но я не уверен, если он будет считать, что можно запустить сотни потоков, которые ничего не делают, эффективно. Они не будут занимать временные фрагменты из планировщика, когда они спят, но они будут потреблять много памяти, и при их создании будет слишком много накладных расходов.

  2. Храните стопку временных меток, и если отметка времени> 30 секунд, удалите ее каждый раз, когда необходимо отправить сообщение. Проведите поток, который проверяет нижнюю часть стека каждые (10-50 мс), чтобы увидеть, если отметка времени> 30 секунд и удалить, если она есть, а затем отправить сообщение с самой высокой позиции в очереди, которая не была если он существует. Когда сообщение отправляется, оно отправляется немедленно, если в очереди есть < # сообщений.

1 имеет недостаток в создании множества потоков, которые ничего не делают.

2 имеет обратную сторону от необходимости использовать 1 поток, чтобы опросить список сообщений постоянно.

2 может быть улучшено, чтобы вычислить время, необходимое для ожидания до тех пор, пока нижнее сообщение в стеке не станет 30 секунд и не отправит сообщение тогда, но я чувствую, что на этом этапе я преувеличиваю проблему.

Любые мысли, по которым был бы лучший подход?

ответ

0

Создайте список отправленных сообщений с датой для каждой записи.

Проверьте список перед публикацией нового сообщения.

+0

Вот что я пытался сделать в '2'. В таком случае я пойду с этим. – deadfire19

+0

Да, я думаю, что это лучшая реализация. –

Смежные вопросы