Aus*_*ust 6 session redis node.js express socket.io
第一个问题
我正在试图找出会话,商店,授权和redis.如果它很重要,我正在使用Express@3.0.0rc4.我明白我有两个选择RedisStore().我用哪一个?我同时使用两者吗?
express.session({secret: 'secret', key: 'key', store: new RedisStore()});
io.set('store', new RedisStore());
Run Code Online (Sandbox Code Playgroud)
我已经有了node.js,express和socket.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
});
Run Code Online (Sandbox Code Playgroud)
我RedisStore()每个都使用相同的吗?我是否为每个创建单独的?我只是用express或socket.io?我真正想要的是能够验证客户端(我假设通过会话完成)并让他们在连接时更新redis数据库 - 记录人们访问我的网站的时间.这导致了我的第二个问题.
io.sockets.on('connection', function(socket){
var session = socket.handshake.session;
redis.put(session);
});
Run Code Online (Sandbox Code Playgroud)
我还没有看到任何关于如何从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 通过express 进行监听。在这种情况下,它将与快速会话管理集成。这就是为什么您在该示例中看不到额外的 io.set('store') 调用。
这对您来说可能显得多余,但请尝试将 RedisStore 视为专为会话管理而设计的特殊客户端。即使认为 RedisStore 可能依赖于像 node_redis 这样的东西,你也不应该尝试访问它。假设您首先想在 Redis 中存储其他非会话项,则必须包含另一个库来直接访问 Redis 数据库。
| 归档时间: |
|
| 查看次数: |
2496 次 |
| 最近记录: |