不能在Heroku上使用带有redis的socket.io

时间:2016-04-07 15:59:12

标签: heroku redis socket.io

我正在尝试使用RedisToGo在Heroku上使用socket io。在当地环境中,一切都很好。

当我将代码部署到Heroku时,大部分时间我从浏览器获得以下数据的400 Bad Request:

{"code":1,"message":"Session ID unknown"}

我的redis配置是:

var url = "redis://redistogo:xxx@lab.redistogo.com:xxxx/";
var rtg   = require("url").parse(url);

var pub = redis.createClient(rtg.port, rtg.hostname, {return_buffers: true});
var sub = redis.createClient(rtg.port, rtg.hostname, {return_buffers: true});
pub.auth(rtg.auth.split(":")[1]);
sub.auth(rtg.auth.split(":")[1]);

var redisOptions = {
  pubClient: pub,
  subClient: sub,
  host: rtg.hostname,
  port: rtg.port
};

io.adapter(ioredis(redisOptions));

有什么问题?

2 个答案:

答案 0 :(得分:1)

问题是Heroku只接受websocket传输。在服务器和客户端中将传输设置为websocket解决了这个问题。

答案 1 :(得分:0)

在Heroku应用上启用会话亲和力应修复会话ID未知错误,您可以通过运行

来执行此操作
heroku features:enable http-session-affinity