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

推送通知不适用于应用商店应用程序 - iphone

IAP 不适用于沙盒商店的 iOS 11

上传到 Play 商店时,Google 登录不适用于应用

生产推送通知 .p12 生产证书不适用于企业分发应用程序(应用商店之外)

Rails activestorage 不适用于 shopify_app gem