我有nginx服务器代理对一些龙卷风实例的请求。每个龙卷风实例都基于Tornado附带的长轮询聊天演示。该脚本有一个存储回调的数组,然后用于将消息发送回客户端。
我遇到的问题是,当有多个龙卷风实例时,nginx使用循环策略。由于回调是按实例存储的(并且不是集中维护的),因此根据请求的发生时间,它会转到其中一个实例。因此,当必须推送数据时,它只会转到存储在同一个龙卷风实例中的回调。
是否存在如何在多个龙卷风实例之间存储数据的标准做法?我正在考虑使用memcached,但是如果我需要迭代商店中的所有密钥,那是不可能的(虽然它不是Id一直需要的东西)。我只是想知道是否存在在多个python进程之间存储数据的标准做法。我还阅读了mmap,但不确定它如何与存储回调(python方法)一起工作。
答案 0 :(得分:1)
没有现成的配方,您可以使用像RabbitMQ这样的mmap或消息提供程序或像Redis这样的简单noSQL DB。 在你的情况下,我可能会尝试ZeroMQ。
答案 1 :(得分:1)
如果它是一个“聊天”风格的应用程序,你可能最好看看Redis以及那里实现的Pub / Sub处理。
这是一个关于pub / sub的好问题。 What is the proper way to handle Redis connection in Tornado ? (Async - Pub/Sub)