繁体   English   中英

在node.js中,如何使用socket.io和express设置redis?特别是使用RedisStore()

[英]In node.js, how do I setup redis with socket.io and express? Specifically using RedisStore()

第一个问题
我正在试图找出会话,商店,授权和redis。 如果这很重要,我使用的是Express@3.0.0rc4 我知道我有两个选项来放置我的RedisStore() 我用哪一个? 我同时使用两者吗?

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

我已经运行了node.jsexpresssocket.io . 所以现在我正在尝试实现redis但我不知道如何使用会话/存储实现授权,我不知道如何写入redis数据库。 我还没有找到任何相关文档。 我找到了一个使用socket.io和express但没有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() 我是否为每个创建单独的? 我只使用expresssocket.io吗? 我真正想要的是能够验证客户端(我假设通过会话完成)并让他们在连接时更新redis数据库 - 记录人们访问我的网站的时间。 这导致了我的第二个问题。


第二个问题
所以我不知道如何从这一点访问和编辑redis数据库。 由于我的第一个问题,我无法测试这个,但我认为它会是这样的:

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

我还没有看到任何关于如何从node.js中更新redis数据库的文档,所以我非常怀疑 redis.put()是正确的术语哈哈。 我访问过redis的网站,但我找不到node.js的命令。 只是命令从命令行使用常规redis。 无论如何,如果有人能够至少指出我正确的方向,那将是伟大的。 谢谢。 :)

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

所以在你的#1情况下,你可以传递一个新的RedisStore实例,而不是你已经完成的两个新实例。 或者你可以按照你的第二个链接,让socket.io通过快递听。 在这种情况下,它将与快速会话管理集成。 这就是为什么在这个例子中你没有看到额外的io.set('store')调用的原因。

这对你来说似乎是多余的,但试着将RedisStore视为专为会话管理而设计的特殊客户端。 即使认为RedisStore可能依赖于node_redis之类的东西,也不应该尝试访问它。 您必须包含另一个库才能直接访问您的redis数据库,假设您希望首先将其他非会话项存储在redis中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM