sql >> データベース >  >> NoSQL >> Redis

socket.ioはどのように複数のサーバー間でメッセージを送信しますか?

    Socket.ioはデフォルトでMemoryStoreを使用するため、接続されているすべてのクライアントがメモリに保存されるため、別のsocket.ioサーバーに接続されているクライアントとイベントを送受信できなくなります(静かではありませんが、後で詳しく説明します)。

    すべてのsocket.ioサーバーにすべてのイベントを受信させる1つの方法は、すべてのサーバーがredisのpub-subを使用することです。したがって、代わりにsocket.emitを使用してredisに公開できます。

    redis_client = require('redis').createClient();
    redis_client.publish('channelName', data);
    

    そして、すべてのソケットサーバーはredisを介してそのチャネルにサブスクライブし、メッセージを受信すると、それらに接続されているクライアントにメッセージを送信します。

    redis_sub = require('redis').createClient();
    redis_sub.subscribe('channelName', 'moreChannels');
    
    redis_sub.on("message", function (channel, message) {        
        socket.emit(channel, message);
    });
    

    複雑なもの!!しかし、待ってください。目標を達成するために、この種のコードは実際には必要ないことがわかりました。 Socket.ioにはRedisStoreがあり、これは基本的に上記のコードが行うはずのことをより適切に実行するため、単一のサーバーに対して作成するのと同じようにSocket.ioコードを記述でき、それでも他のsocket.ioサーバーに伝播されます。 redis。

    要約すると、socket.ioは、メモリの代わりにredisをチャネルとして使用して、複数のサーバーにメッセージを送信します。



    1. Hiveを使用したHBaseとの対話、パート1

    2. MongoDBにファイルをインポートするときにドキュメントをマージする方法

    3. MongoDB $ mergeObjects

    4. socket.ioでRedisStoreを使用する例