gpt4 book ai didi

node.js - 如何设置 RedisStore -- Node、Express、Socket.io、Heroku

转载 作者:IT老高 更新时间:2023-10-28 23:19:55 25 4
gpt4 key购买 nike

我正在使用部署在 Heroku 上的 Node & Express 4.0,并且我正在尝试使用 Redis 作为 session 存储来实现 Socket.io。所以我把它作为我当前的代码:

 var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var RedisStore = io.RedisStore;

if (process.env.REDISTOGO_URL) {
// inside if statement
var rtg = require("url").parse(process.env.REDISTOGO_URL);
var redis = require("redis").createClient(rtg.port, rtg.hostname);

redis.auth(rtg.auth.split(":")[1]);
} else {
var redis = require("redis").createClient();
}

/** Initialize RedisStore for socket.io **/
io.set('store', new RedisStore({
redis : redis
}));

但我收到以下错误:

14:25:03 web.1  | io.set('store', new RedisStore({
14:25:03 web.1 | ^
14:25:03 web.1 | TypeError: undefined is not a function

我也见过这种定义 RedisStore 的方式:

var redis = require('socket.io/node_modules/redis');
var RedisStore = require('socket.io/lib/stores/redis');

但是,我安装的 socket.io 版本是使用 npm install --save socket.io 安装的, 不包括 storeslib目录:

enter image description here


编辑

我在 socket.io 页面上看到了关于他们的 1.0 版本:

// 2. Implement the socket.io-redis adapter

var io = require('socket.io')(3000);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

但是我找不到关于这个新模块的其他文档,而且由于我是整个堆栈的新手,我想我自己无法弄清楚。

最佳答案

node.js 模块之间的趋势是删除不是模块真正核心的功能。

这就是为什么 socket.io 1.0 不再支持开箱即用的 redis。

所以第一步是追踪你需要的功能。

  1. http://socket.io/docs/server-api/
  2. https://github.com/Automattic/socket.io-adapter
  3. https://github.com/Automattic/socket.io-redis

然后需要安装其他模块npm install socket.io-redis --save

最后配置您的应用程序。

var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var redis = require('socket.io-redis');

io.adapter(redis(process.env.REDISTOGO_URL));

不错的部分是 socket.io-redis 适配器接受 redis url 并默认为 localhost:6379,因此您(应该)能够简单地传入 REDISTOGO_URL

关于node.js - 如何设置 RedisStore -- Node、Express、Socket.io、Heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24499306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com