在Heroku上使用带有node.js的RedisCloud,允许(将来)扩展到多个dyno。
通过以下方式让Redis工作: https://devcenter.heroku.com/articles/rediscloud#using-redis-from-node-js
例如,下面的注释“Prints'bar'”的行确实将“bar”写入控制台。
然后按此添加socket.io-redis进行缩放: https://github.com/Automattic/socket.io-redis
以上内容应该允许我使用以下内容:
io.adapter(redis({ host: 'localhost', port: 6379 }));
我的代码中的等价物是:
io.adapter(ioredis (redisOptions));
然而,我一直收到一条错误,说io没有方法'适配器'。
或者,如果我首先使用'if'语句检查io.adapter是否存在(如下面的代码所示),那么条件代码永远不会执行。
谁能看到我在这里做错了什么?为什么不存在io.adapter?
package.json中的
"dependencies": {
"redis": "^0.12.1",
"express": "^3.4.8",
"socket.io": "^0.9.16",
"socket.io-redis":"^0.1.4"
}
也尝试将此添加到package.json
"socket.io-adapter": "^0.2.0"
app.js中的(我的节点服务器代码):
var express = require('express')
, app = express()
, http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server)
, redis = require('redis')
, ioredis = require('socket.io-redis')
, url = require('url')
, redisURL = url.parse(process.env.REDISCLOUD_URL);
稍后在app.js:
io.sockets.on('connection', function (socket) {
var pub1 = redis.createClient(redisURL.port, redisURL.hostname, {return_buffers: true});
var sub1 = redis.createClient(redisURL.port, redisURL.hostname, {return_buffers: true});
pub1.auth(redisURL.auth.split(":")[1]);
sub1.auth(redisURL.auth.split(":")[1]);
var redisOptions = {
pubClient: pub1,
subClient: sub1,
host: redisURL.hostname,
port: redisURL.port
};
pub1.set('foo', 'bar');
sub1.get('foo', function (err, reply) {
console.log("redis test : "+reply.toString());
// Prints 'bar'
});
if (io.adapter) {
// Never reached
io.adapter(ioredis (redisOptions));
console.log ("mylog: io.adapter found");
}
console.log ("mylog server connection event fired");
答案 0 :(得分:1)
socket.io-redis旨在与socket.io 1.x一起使用。
0.9.x版本没有适配器。