我有两个 Tornado 进程 X
和 Y
。 X
中的处理程序处理 post 请求,当这样的请求到达时,除了在 X
中进行更改外,我还想更改存储在 Y 中的一些变量
。
我想使用 Redis
的 PUB/SUB 来做到这一点。很明显,在 X
的处理程序中,我需要向“Y”订阅的 channel 发布消息。
Y
中的这个订阅应该是长期运行的,这样每当有消息发布到 channel 时,Y
中的内容就会自动更新内存中的变量。但是,我不清楚如何在 Y
中实现此订阅和由此产生的更新,因为它不可能是一个普通的处理程序。我计划为此使用异步 redis 客户端 tornado-redis
,如果这有什么不同的话。
一些例子会很有帮助!
最佳答案
这不是 Redis PUB/SUB 解决方案,而是替代方案。如果您的堆栈上已经有 Redis,您不妨使用它(或者更好的消息队列)。
最简单的方法是在 Y 中为此设置一个
tornado.web.RequestHandler
。当 X 需要进行更改时,让 X 向 Y 发送一个 HTTPRequest。有效负载可以是 JSON、表单-编码,二进制。在 Y 中创建一个套接字,绑定(bind)它并添加
IOLoop.add_handler
监听该套接字并使用callback
运行。当 X 需要进行更改时,让它连接到那个套接字。 (有效载荷可以是 JSON、二进制)。如果您需要发送消息,这将需要一个小套接字接受和读取。
不用说,两者都应该在防火墙后面。
关于redis - 使用redis pub/sub连接Tornado进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14405215/