Ram*_*sel 10 heroku node.js express socket.io
我正在使用部署在Heroku上的Node和Express 4.0,我正在尝试使用Redis实现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
}));
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
我也看过这种定义RedisStore的方法:
var redis = require('socket.io/node_modules/redis');
var RedisStore = require('socket.io/lib/stores/redis');
Run Code Online (Sandbox Code Playgroud)
但是,我安装的socket.io安装版本npm install --save socket.io
不包含stores
在lib
目录中:
编辑
我在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 }));
Run Code Online (Sandbox Code Playgroud)
但是我没有找到关于这个新模块的其他文档,因为我是这个整个堆栈的新手,我不认为我可以自己搞清楚.
node.js模块之间的趋势是删除不是模块真正核心的功能.
这就是为什么socket.io 1.0不再支持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));
Run Code Online (Sandbox Code Playgroud)
好的部分是socket.io-redis适配器接受redis url并默认为localhost:6379所以你(应该)能够简单地传入 REDISTOGO_URL
我不得不解析上面的库来得到这个例子,所以我想我会发布一个完整的例子,但我必须承认有一些关闭,这使用REDISCLOUD,它在Heroku上,它确实有效.我会在其他地方发布这个,也许也可以把它放在doc中.
var redis = require('redis');
var ioredis = require('socket.io-redis'); //Adapter
var url = require('url');
var redisURL = url.parse(process.env.REDISCLOUD_URL );
var pub = redis.createClient(redisURL.port, redisURL.hostname, {return_buffers: true});
var sub = redis.createClient(redisURL.port, redisURL.hostname, {return_buffers: true});
pub.auth(redisURL.auth.split(":")[1]);
sub.auth(redisURL.auth.split(":")[1]);
var redisOptions = {
pubClient: pub,
subClient: sub,
host: redisURL.hostname,
port: redisURL.port
};
io.adapter(ioredis(redisOptions));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10021 次 |
最近记录: |