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

socket.ioでRedisStoreを使用する例

    しかし、そのコードでRedisStoreを使用することと、MemoryStoreを使用することとの違いがわかりません。誰かが私にそれを説明できますか?

    違いは、デフォルトのMemoryStoreを使用する場合です。 、ワーカー間にIPCがないため、ワーカーで送信するメッセージは、同じワーカーに接続されているクライアントにのみ送信されます。 RedisStoreの使用 、メッセージは、すべてのワーカーがサブスクライブしているredisサーバーに公開されます。したがって、メッセージはすべてのワーカー、および接続されているすべてのクライアントによってピックアップおよびブロードキャストされます。

    また、redisstoreを使用するようにsocket.ioを構成することと、独自のredisクライアントを作成して独自のデータを設定/取得することの違いは何ですか?

    私はRedisStoreに精通していません 、だから私はすべての違いについてはわかりません。しかし、それを自分で行うことは完全に有効な方法です。その場合、すべてのメッセージをRedisサーバーに公開し、ソケットハンドラーでそれらのメッセージを聞くことができます。それはおそらくあなたにとってより多くの仕事になるでしょうが、あなたはそれをどのように設定したいかについてもより多くの制御を持っているでしょう。私は自分と同じようなことをしました:

    // Publishing a message somewhere
    var pub = redis.createClient();
    pub.publish("messages", JSON.stringify({type: "foo", content: "bar"}));
    
    // Socket handler
    io.sockets.on("connection", function(socket) {
      var sub = redis.createClient();
      sub.subscribe("messages");
      sub.on("message", function(channel, message) {
        socket.send(message);
      });
    
      socket.on("disconnect", function() {
        sub.unsubscribe("messages");
        sub.quit();
      });
    });
    

    これは、たとえば、さまざまなチャネルを公開/サブスクライブすることによって、より高度なメッセージルーティングを自分で処理する必要があることも意味します。 RedisStoreを使用 、socket.ioチャネル(io.sockets.of("channel").emit(...)を使用すると、その機能を無料で利用できます。 。

    これの潜在的に大きな欠点は、socket.ioセッションがワーカー間で共有されないことです。ロングポーリングトランスポートのいずれかを使用する場合、これはおそらく問題を意味します。



    1. summongodbでグループ化

    2. MongoDBスキーマ設計-小さなドキュメントが多いですか、それとも大きなドキュメントが少ないですか?

    3. Mongo DBは、キーフィールドに応じて最も高い値を持つすべてのレコードを検索します

    4. キーの有効期限にソートされたセットを更新するRedis