redis - 使用redis pub/sub连接Tornado进程

标签 redis tornado publish-subscribe interprocess

我有两个 Tornado 进程 XYX 中的处理程序处理 post 请求,当这样的请求到达时,除了在 X 中进行更改外,我还想更改存储在 Y 中的一些变量

我想使用 Redis 的 PUB/SUB 来做到这一点。很明显,在 X 的处理程序中,我需要向“Y”订阅的 channel 发布消息。

Y 中的这个订阅应该是长期运行的,这样每当有消息发布到 channel 时,Y 中的内容就会自动更新内存中的变量。但是,我不清楚如何在 Y 中实现此订阅和由此产生的更新,因为它不可能是一个普通的处理程序。我计划为此使用异步 redis 客户端 tornado-redis,如果这有什么不同的话。

一些例子会很有帮助!

最佳答案

这不是 Redis PUB/SUB 解决方案,而是替代方案。如果您的堆栈上已经有 Redis,您不妨使用它(或者更好的消息队列)。

  1. 最简单的方法是在 Y 中为此设置一个 tornado.web.RequestHandler。当 X 需要进行更改时,让 X 向 Y 发送一个 HTTPRequest。有效负载可以是 JSON、表单-编码,二进制。

  2. 在 Y 中创建一个套接字,绑定(bind)它并添加 IOLoop.add_handler 监听该套接字并使用 callback 运行。当 X 需要进行更改时,让它连接到那个套接字。 (有效载荷可以是 JSON、二进制)。如果您需要发送消息,这将需要一个小套接字接受和读取。

不用说,两者都应该在防火墙后面。

关于redis - 使用redis pub/sub连接Tornado进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14405215/

相关文章:

Node.js Redis 订阅回调未执行

c++ - 连接到DDS中的主机:是否完全联网?

php - 如何在Redis,Predis中获取相关数据?

javascript - 我如何在 nginx 中允许 header "Accept-Ranges"?

python-2.7 - 移动应用聊天解决方案

javascript - 实时网络库 - 用 socket.io 或什么替换 hookbox?

node.js - 大多数特定 URI 的类似键值的存储

node.js - 使用 passportJS 在 Heroku 上获取请求超时

Redis:如果我对 HA 不感兴趣,那么仅使用分片是否有意义?

python - 使用await或yield迭代循环会导致错误