Python 消息缓存以应对彗星?

1 投票
1 回答
529 浏览
提问于 2025-04-16 13:23

我可以通过一个简单的例子来说明我想要的东西。Tornado的一个演示是一个简单的聊天服务器:

https://github.com/facebook/tornado/blob/master/demos/chat/chatdemo.py

我对这里的 MessageMixin 类很感兴趣。这个类会保持一个固定长度的消息记录,当有新消息时,它会返回消息列表中新增的部分。或者说,它看起来是这样做的。我知道我以前在写一个简单的 comet 应用时实现过类似的功能。

那么,有人把这个功能做得更通用,并添加了一些炫酷的东西吗?我特别想知道有没有办法管理多个沟通频道,并删除那些长时间没有使用的频道。持久化存储可能也会很有用。

这是不是消息队列(MQ)能做到的事情?

1 个回答

3

Redis 有一个 发布/订阅 的功能,还有一些额外的 数据结构命令,你可以用来保存和过期消息记录,列出某个房间里的用户,或者其他与用户相关的属性。这个协议是基于文本的,并且包含了 Memcached 命令的更多功能。

这里有一个描述,使用 聊天作为发布/订阅的例子,还有一个 用 Ruby 和 Websocket 的例子,以及一个用 Websocket、Tornado 和 Redis 发布/订阅 实现简单聊天室的 Python 代码片段。

根据你问题中的信息,专用的消息队列(像 RabbitMQ)可能对你也有帮助。不过,如果不知道你在消息量、容错、复制等方面的需求,很难给出准确的建议。Redis 也可能是你需要的,但无论如何,它相对简单,可以帮助你快速搭建一个原型,以便更好地明确你应用的需求。

撰写回答