我有两个Tornado进程X
和Y
。X
中的处理程序处理post请求,当这样的请求到达时,除了在X
中进行更改外,我还想更改Y
中存储的一些变量。
我想使用Redis
的PUB/SUB来做到这一点。很明显,在X
的处理程序中,我需要将消息发布到由'Y'订阅的通道。
Y
中的订阅应该是长时间运行的,这样每当消息发布到通道时,Y
中的某些内容应该自动更新内存中的变量。然而,我不清楚如何在Y
中实现此订阅和由此产生的更新,因为它不能是一个正常的处理程序。我计划异步redis客户端tornado-redis
,如果这有任何区别。
一些例子将是很大的帮助!
这不是Redis PUB/SUB解决方案,而是替代方案。如果你已经在你的堆栈上有Redis,你也可以使用它(或者更好的是消息队列)。
-
最简单的是在y中有一个
tornado.web.RequestHandler
。当X需要进行更改时,让X发送一个HTTPRequest给Y.有效载荷可以是JSON,格式编码,二进制。 -
在Y中创建一个套接字,绑定它并在该套接字上添加
IOLoop.add_handler
侦听,并运行callback
。当X需要进行更改时,让它连接到该套接字。(有效载荷可以是JSON,二进制)。这将需要一个小插座接受&
不用说,两者都应该在防火墙后面。