2

WebSocket と TornadoRedis を処理する Tornadio2 を備えた Tornado サーバーを使用して、リアルタイム メッセージをクライアントに発行します (コードはいくつかの例からマージされました)。

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()

このコードは機能し、次の 2 つのことを達成するために接続を Redis に保存したいと考えています。 1. サーバーの冗長性をサポートする 2. Tornado を再起動しても接続を使用できるようにする

グローバルリストを使用して接続を保存する例をいくつか見ましたが、もちろんこれは上記の問題を解決しません。

それで、どうすればこれを達成できますか?

別の話ですが、これは良い設定ですか?node.js と socket.io と redis を比較してどうですか?

4

0 に答える 0