创建IRC消息队列

时间:2015-01-08 22:11:17

标签: java multithreading message-queue irc

我需要一种方法来限制我的IRC机器人上的消息计数,以避免全球禁止因聊天泛滥而被抽搐。 (它们允许100条消息/ 30秒)

我认为有两种方法都涉及消息队列。

  1. 每条消息都会启动一个带有计数信号量的线程。然后该线程阻塞30秒并在此之后释放。这将是一个非常干净的解决方案,因为队列将完全由操作系统管理,这对我来说意味着更少的工作,但是,它可能导致创建数百个线程。这些线程将在其生命的大部分时间内处于休眠状态,但我不确定是否可以有效地启动数百个无效的线程。当他们睡着时,他们不会从调度程序中占用时间片,但是他们会占用大量内存,创建它们会有很多开销。

  2. 存储一叠时间戳,如果时间戳大于30秒,则每次需要发送消息时将其删除。运行一个线程,每隔10-50ms检查堆栈底部,看看时间戳是否> 30秒,如果是,则删除,然后从队列中最高位置发送一条消息如果存在则被发送。当有消息进入时,如果队列中有<#消息,则立即发送消息。

  3. 1的缺点是创建了许多无效的线程。

    2的缺点是需要1个线程不断轮询消息列表。

    2可以改进以计算等待堆栈中的底部消息为30秒之前所需的时间然后发送消息,但我感觉好像我在那个阶段过度复杂化了问题。

    有哪些想法会更好的方法?

1 个答案:

答案 0 :(得分:0)

创建一个sentMessage列表,其中包含每个条目的日期。

在发布新消息之前检查列表。