【问题标题】:socket io on herokuheroku上的socket io
【发布时间】:2013-04-01 12:26:38
【问题描述】:

我在 heroku 上有一个简单的节点程序,它定期向所有客户端发送消息。但我不断收到以下警告,导致重新连接。这是我应该担心的事情吗?我大约每 2-3 次发射就得到这个。

请注意,我在 localhost 上没有收到任何警告或重新连接。我正在为本地和 heroku 实例使用长轮询配置。此外,我在 heroku 上的 PS 规模越高,收到的警告越多。

错误

warn: client not handshaken client should reconnect

app.js

io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});

io.sockets.on('connection', function (socket) {
  socket.emit('news', 'reconnect');
});

setInterval(function(){
  io.sockets.emit('news', {time: new Date()} )
},3000);

client.js

var socket = io.connect('/');
socket.on('news', function (data) {
  console.log(data);
});

【问题讨论】:

  • 我知道这听起来有点奇怪,但您是否尝试过联系他们的支持?

标签: node.js heroku socket.io


【解决方案1】:

另外,我在 heroku 上的 PS 规模越大,收到的警告越多。

是关键。

Socket.io 设计为在单个进程中运行。它将会话存储在内存中。您需要您的代理具有粘性,始终将同一个用户发送到同一个进程,或者您需要共享会话(从那时起您共享房间会更好);

信息是@

https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

缺点是你需要使用 redis

var RedisStore = require('socket.io/lib/stores/redis')
  , redis  = require('socket.io/node_modules/redis')
  , pub    = redis.createClient()
  , sub    = redis.createClient()
  , client = redis.createClient();

io.set('store', new RedisStore({
  redisPub : pub
, redisSub : sub
, redisClient : client
}));

幸运的是 heroku 有五个不同的 redis 插件,其中三个有免费层。

【讨论】:

    猜你喜欢
    • 2019-01-31
    • 1970-01-01
    • 2019-07-07
    • 2019-04-10
    • 2023-03-03
    • 2021-12-11
    • 2019-10-12
    • 2019-10-03
    • 2023-04-05
    相关资源
    最近更新 更多