Redis
 sql >> Database >  >> NoSQL >> Redis

Come riutilizzare la connessione redis in socket.io?

In realtà stai solo creando un nuovo client redis per ogni connessione se stai creando un'istanza del client sull'evento "connessione". Quello che preferisco fare quando creo un sistema di chat è creare tre client redis. Uno per la pubblicazione, la sottoscrizione e uno per la memorizzazione dei valori in redis.

ad esempio:

var socketio = require("socket.io")
var redis = require("redis")

// redis clients
var store = redis.createClient()
var pub = redis.createClient()
var sub = redis.createClient()

// ... application paths go here

var socket = socketio.listen(app)

sub.subscribe("chat")

socket.on("connection", function(client){
  client.send("welcome!")

  client.on("message", function(text){
    store.incr("messageNextId", function(e, id){
      store.hmset("messages:" + id, { uid: client.sessionId, text: text }, function(e, r){
        pub.publish("chat", "messages:" + id)
      })
    })
  })

  client.on("disconnect", function(){
    client.broadcast(client.sessionId + " disconnected")
  })

  sub.on("message", function(pattern, key){
    store.hgetall(key, function(e, obj){
      client.send(obj.uid + ": " + obj.text)
    })
  })

})