在Heroku上使用RedisCloud和node.js允許(將來)縮放到多個dyno。'io'中沒有方法'adapter'(node.js,heroku,RedisCloud,socket.io)
了Redis的按照這方面的工作: https://devcenter.heroku.com/articles/rediscloud#using-redis-from-node-js
例如下面的註釋「打印‘欄’」行不寫「酒吧」到控制檯。
然後跟着這個添加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");
在package.json中更改爲以下內容:「socket.io」:「^ 1.0.0」,並且適配器在那裏!謝謝你Barış! – user1147171 2014-12-19 19:48:09