socketsio上heroku

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

要注意,我没有得到任何警告或本地主机上重新连接。 我正在使用本地和英雄库实例的长轮询configuration。 而且,我越高,我在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); }); 

而且,我越高,我在heroku上的PS就越多,我得到的警告就越多。

是关键。

Socket.io被devise为在单个进程中运行。 它将会话存储在内存中。 你需要你的代理是粘性的,总是把同一个用户发送到同一个进程,或者你需要共享会话(这样会更好,因为你共享房间)。

信息是@

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插件,其中三个有免费的分层。