我有一个 Tornado 服务器,其中 Tornadio2 处理 WebSocket 和 TornadoRedis,我通过它向客户端发布实时消息(代码是从几个示例中合并的)。
redis_client = tornadoredis.Client(config.get('cache', 'host'), int(config.get('cache', 'port')))
redis_client.connect()
class RealtimeHandler(tornadio2.conn.SocketConnection):
def __init__(self, *args, **kwargs):
super(RealtimeHandler, self).__init__(*args, **kwargs)
self.listen()
@tornado.gen.engine
def listen(self):
self.client = tornadoredis.Client(config.get('cache', 'host'), int(config.get('cache', 'port')))
self.client.connect()
yield tornado.gen.Task(self.client.subscribe, 'invalidation')
self.client.listen(self.on_message)
def on_event(self, name, *args, **kwargs):
if name == 'invalidation':
redis_client.publish('invalidation', kwargs['args'])
def on_message(self, msg):
if msg.kind == 'message':
self.send(msg.body)
def on_close(self):
if self.client.subscribed:
self.client.unsubscribe('invalidation')
self.client.disconnect()
此代码有效,现在,我想将连接存储在 Redis 中以完成两件事:1. 支持我的服务器的冗余 2. 即使我重新启动 Tornado 也能够使用连接
我看到了几个使用全局列表来保存连接的示例,但这当然不能解决我上面的问题。
那么,我该如何实现呢?
另一方面,这是一个好的设置吗?它与带有 socket.io 和 redis 的 node.js 相比如何?