Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Redis管理tornado websocket的连接_Python_Websocket_Redis_Tornado - Fatal编程技术网

Python 如何使用Redis管理tornado websocket的连接

Python 如何使用Redis管理tornado websocket的连接,python,websocket,redis,tornado,Python,Websocket,Redis,Tornado,我有一个Tornado服务器,Tornadio2处理WebSocket和TornadRedis,通过它我可以向客户端发布实时消息(代码由几个示例合并而成) 这段代码有效,现在,我想将连接存储在Redis中,以完成两件事: 1.支持我的服务器的冗余 2.即使我重启Tornado,也能使用连接 我看到了几个例子,其中一个全局列表用于保存连接,但这当然不能解决我上面的问题 那么,我如何做到这一点呢 另一方面,这是一个好的设置吗?它与带有socket.io和redis的node.js相比如何?每个订阅的

我有一个Tornado服务器,Tornadio2处理WebSocket和TornadRedis,通过它我可以向客户端发布实时消息(代码由几个示例合并而成)

这段代码有效,现在,我想将连接存储在Redis中,以完成两件事: 1.支持我的服务器的冗余 2.即使我重启Tornado,也能使用连接

我看到了几个例子,其中一个全局列表用于保存连接,但这当然不能解决我上面的问题

那么,我如何做到这一点呢


另一方面,这是一个好的设置吗?它与带有socket.io和redis的node.js相比如何?

每个订阅的客户端将有一个redis连接,这在某个时候可能是个问题。@TommasoBarbugli谢谢。您建议我如何处理它?您可以使用一个pub/sub并使用python进行路由(我在这里做了类似的事情)@TommasoBarbugli再次感谢。我会试试看。。。
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()