2015-01-08 105 views
0

我需要一種方法來限制我的IRC bot上的消息數量,以避免全局禁止聊天氾濫的抽搐。 (他們允許100條消息/ 30秒)創建一個IRC消息隊列

有兩種方式我考慮這樣做,涉及消息隊列。

  1. 每個消息啓動一個佔用計數信號量的線程。此線程然後阻塞30秒並在此之後釋放。這將是一個非常乾淨的解決方案,因爲隊列將完全由OS管理,這對我來說意味着更少的工作,但是,它可能會導致創建數百個線程。這些線程在他們一生中的大部分時間都會休眠,但我不確定是否可以啓動數百個無效的線程。他們在睡眠時不會佔用時間片,但會消耗大量內存,並且在創建它們時會有很多開銷。

  2. 存儲一疊時間戳,如果時間戳大於30秒,則每次需要發送消息時將其刪除。每運行一個線程檢查堆棧的底部(10-50ms)以查看時間戳是否大於30秒,如果是,則從隊列中的最高位置發送消息,然後發送消息如果存在,則發送。當消息進來發送時,如果隊列中有<#消息,它會立即發送。

1有創建許多線程什麼也不做的缺點。

2有需要1個線程不斷查詢消息列表的缺點。

2可以改進以計算等待堆棧中的底部消息的時間爲30秒,然後發送消息所需的時間,但是我覺得在那個階段我過於複雜。

任何想法都是更好的方法?

回答

0

爲每個條目創建一個帶有日期的sentMessage列表。

在發佈新消息之前查看列表。

+0

這就是我在'2'中所做的。在那種情況下,我會和他一起去。 – deadfire19

+0

是的,我認爲這是最好的實施。 –