首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用socket.io-redis和RedisToGo扩展到Heroku上的2+ dynos

使用socket.io-redis和RedisToGo扩展到Heroku上的2+ dynos
EN

Stack Overflow用户
提问于 2015-03-04 05:29:23
回答 1查看 568关注 0票数 4

我正在尝试使用socket.io-redis将我在Heroku上的应用程序扩展到2个dynos (或更多)。下面是我的代码(其中config.redis只是一个包含RedisToGo端口、主机和传输值的对象):

代码语言:javascript
复制
var redisApp = require('redis');
var redis = require('socket.io-redis');    
if(process.env.NODE_ENV === 'production') {
   var socketpub = redisApp.createClient(config.redis.port, config.redis.host, {auth_pass: config.redis.pass, return_buffers: true});
   var socketsub = redisApp.createClient(config.redis.port, config.redis.host, {auth_pass: config.redis.pass, detect_buffers: true});
   var client = redisApp.createClient(config.redis.port, config.redis.host, {auth_pass: config.redis.pass, return_buffers: true});
   socketio.adapter(redis({
      pubClient: socketpub,
      subClient: socketsub,
      redisClient: client
   }));
}

在客户端,我有:

代码语言:javascript
复制
var ioSocket = io('', {
  path: '/socket.io-client',
  'force new connection': true,
  transports: ['websocket']
});

..so socket.io不会尝试使用轮询。

我还为RedisToGo (REDISTOGO_HOST、REDISTOGO_PASS、REDISTOGO_PORT)配置了正确的Heroku env变量。

当我们扩展到1dyno时,套接字行为是完美的。在2个dyno时,这种行为是完全不同的--请求是随机发送给1个dyno或另一个dyno的,并且发出的套接字事件只发送给在发出请求的dyno上运行的客户端,而不是所有客户端( socket.io-redis & RedisToGo应该负责)。

如果您有任何想法,我们将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2015-05-28 00:54:50

不确定这是否对你有帮助,但我正在以这种方式使用redis和socketio,它工作得很好。

代码语言:javascript
复制
var redis = require('redis').createClient;
var adapter = require('socket.io-redis');
var port = config.redistogo.port;
var host = config.redistogo.host;

var pub = redis(port, host, {
  auth_pass: auth_pass
});

var sub = redis(port, host, {
  detect_buffers: true,
  auth_pass: auth_pass
});

io.adapter(adapter({
  pubClient: pub,
  subClient: sub
}));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28842266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档