Connect-redis 商店不适用于 socket.io
Posted
技术标签:
【中文标题】Connect-redis 商店不适用于 socket.io【英文标题】:Connect-redis store don't work with socket.io 【发布时间】:2013-06-15 17:19:11 【问题描述】:对于使用 connect-redis 的人,我有一个简单的问题。
我想将它与带有函数io.set('store', something)
的socket.io 一起使用。
我不知道为什么,当我做
var RedisSessionStore = require('connect-redis')(express);
var sessionStore = new RedisSessionStore();
app.use(express.session(
secret: 'some totally secret key',
cookie:
maxAge: 1000 * 60 * 60
,
store: sessionStore
));
//and then I wan't to use the session store for socket.io
io.set('store', sessionStore);
它说Object #<RedisStore> has no method 'subscribe'
【问题讨论】:
【参考方案1】:connect-redis
是 Redis 支持的 Connect/Express 会话存储,但它与 socket.io
使用的“存储协议”不兼容。
相反,您需要使用 socket.io
附带的 Redis 存储实现:
var SocketIoRedisStore = require('socket.io/lib/stores/redis'),
redis = require('socket.io/node_modules/redis');
...
io.set('store', new SocketIoRedisStore(
redisPub : redis.createClient(),
redisSub : redis.createClient(),
redisClient : redis.createClient()
));
(docs)
【讨论】:
谢谢!我很害怕,因为我认为我必须创建第二组 pub/sub/client,一组用于 socket.io,一组用于 express。现在我看到new RedisSessionStore
接受redis 客户端作为选项。
这是否意味着上面这一行 var RedisSessionStore = require('connect-redis')(express);应该从 app.js 文件中删除还是只重命名变量以创建 io.set 部分?如果要删除 var,您将上面的快速会话存储为什么?以上是关于Connect-redis 商店不适用于 socket.io的主要内容,如果未能解决你的问题,请参考以下文章
EXTJS 5.0:无限网格滚动不适用于商店中的 extraParams