创建 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 消息队列的主要内容,如果未能解决你的问题,请参考以下文章

rt_thread的消息队列

rt_thread的消息队列

005_消息队列

移动云消息队列RabbitMQ对资源创建数量有限制吗?

自测之Lesson11:消息和消息队列

IPC之——消息队列