创建 IRC 消息队列
Posted
技术标签:
【中文标题】创建 IRC 消息队列【英文标题】:Creating an IRC Message Queue 【发布时间】:2015-01-08 22:11:16 【问题描述】:我需要一种方法来限制我的 IRC 机器人上的消息计数,以避免全球禁止 twitch 导致聊天泛滥。 (它们允许 100 条消息/30 秒)
我考虑过两种方法都涉及到消息队列。
每条消息都会启动一个线程,该线程接受一个计数信号量。然后该线程阻塞 30 秒并在此时间后释放。这将是一个非常干净的解决方案,因为队列将完全由操作系统管理,这对我来说意味着更少的工作,但是,它可能会导致创建数百个线程。这些线程将在其生命周期的大部分时间里处于休眠状态,但我不确定是否可以有效地启动数百个什么都不做的线程。它们在睡眠时不会占用调度程序的时间片,但它们会消耗大量内存,并且在创建它们时会产生大量开销。
存储时间戳堆栈,如果时间戳超过 30 秒,则在每次需要发送消息时将其删除。让一个线程运行,每(10-50ms)检查一次堆栈底部,以查看时间戳是否超过 30 秒,如果是则删除,然后从队列中尚未完成的最高位置发送消息如果存在则发送。当有消息要发送时,如果队列中有
1 的缺点是创建了许多什么都不做的线程。
2 的缺点是需要 1 个线程不断轮询消息列表。
2 可以改进以计算等待堆栈中的底部消息达到 30 秒并随后发送消息所需的时间,但我觉得我在那个阶段让问题过于复杂。
有什么更好的方法吗?
【问题讨论】:
【参考方案1】:为每个条目创建一个包含日期的 sentMessage 列表。
在发布新消息之前检查列表。
【讨论】:
这就是我在'2'中尝试做的。在那种情况下,我会同意的。 是的,我认为这是最好的实现。以上是关于创建 IRC 消息队列的主要内容,如果未能解决你的问题,请参考以下文章