如何使用Redis管理龙卷风websocket的连接

时间:2013-05-21 05:38:37

标签: python websocket redis tornado

我有一个Tornadio服务器,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

,也可以使用连接

我看到几个示例,其中使用全局列表来保存连接,但这当然不能解决我上面的问题。

那么,我该如何做到这一点?

另一方面,这是一个很好的设置吗?如何将node.js与socket.io和redis进行比较?

0 个答案:

没有答案