在node.js中,如何使用socket.io设置redis并进行expression? 特别使用RedisStore()

第一个问题
我试图找出会议,商店,授权和redis。 如果重要,我使用Express@3.0.0rc4 。 我明白,我有两个select把我的RedisStore() 。 我使用哪一个? 我是否同时使用?

 express.session({secret: 'secret', key: 'key', store: new RedisStore()}); io.set('store', new RedisStore()); 

我已经有了node.jsexpresssocket.io运行。 所以现在我试图实现redis但我不知道如何使用会话/存储实现授权,我不知道如何写入redis数据库。 我还没有find任何文件。 我发现一个网站,谈论会议和商店使用socket.io和快递,但没有redis,另一个谈到会议和商店使用所有三个 ,但它不使用io.set('store', ...)

我也不知道是否应该使用两个不同的商店,一个用于express ,另一个用于socket.io ,或者如果我只使用一个。 看看这个例子来澄清:

 //Redis Variables var redis = require('socket.io/node_modules/redis'); var RedisStore = require('socket.io/lib/stores/redis'); var pub = redis.createClient(); var sub = redis.createClient(); var client = redis.createClient(); var redis_store = new RedisStore({ redisPub: pub, redisSub: sub, redisClient: client }); app.configure(function(){ //...code goes here... app.use(express.session({ secret: 'secret', key: 'key', store: redis_store //Notice I'm using redis_store })); //...more code... }); io.configure(function(){ io.set('store', redis_store); //Notice it's the same RedisStore() being used }); 

我是否每个使用相同的RedisStore() ? 我是否为每个创build单独的? 我只使用expresssocket.io ? 我真正想要的是能够validation客户端(我假设这是通过会话完成的),让他们在连接时更新redis数据库 – logging人们何时访问我的网站。 这导致了我的第二个问题。


第二个问题
所以我不知道如何从这一点访问和编辑redis数据库。 我没有能够testing这是因为我的第一个问题,但我认为这将是这样的:

 io.sockets.on('connection', function(socket){ var session = socket.handshake.session; redis.put(session); }); 

我也没有看到如何从node.js更新redis数据库的任何文档,所以我非常怀疑 redis.put()是正确的术语哈哈。 我访问过redis的网站,但找不到node.js的命令。 只是从命令行使用常规redis的命令。 无论如何,如果有人能够至less指出我会朝着正确的方向发展,那就太好了。 谢谢。 🙂

如您所见,Express和Socket.IO与Redis进行会话pipe理的集成。 它被devise为黑盒集成,这个想法是会话存储实现是独立于其他代码的。 由于它是独立的,这意味着你不能直接使用express或socket.io来访问Redis。 你需要添加一个像node_redis这样的常规redis客户端。 好处是你不用担心自己完成所有这些Redis调用,而是用express或socket.io的会话存储接口进行交互。

因此,在您的#1案例中,您可以传入一个RedisStore的新实例,而不是像您所做的那样传入两个新实例。 或者你可以按照你的第二个链接,并让socket.io快速通过。 在这种情况下,它将整合快速会话pipe理。 这就是为什么在这个例子中你看不到额外的io.set('store')调用。

这对您来说可能看起来有点多余,但是可以将RedisStore作为仅为会话pipe理而devise的特殊客户端。 甚至认为RedisStore可能依赖于像node_redis这样的东西,你不应该试图访问它。 假设您想要将其他非会话项目首先存储在redis中,则必须包含另一个用于直接访问redis数据库的库。