没有方法'适配器' in' io' (node.js,heroku,RedisCloud,socket.io)

时间:2014-12-19 05:45:59

标签: node.js sockets heroku redis

在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");

1 个答案:

答案 0 :(得分:1)

socket.io-redis旨在与socket.io 1.x一起使用。

0.9.x版本没有适配器。