Socket 1.0重复连接多次

我使用的是Heroku + RedisToGo + Express 4.0 + socket.io 1.0.6。

我刚刚从0.9升级到1.0,现在已经有一半了。 我从教程中一起入侵了一个应用程序,但是我对socket.io的理解不够清晰,所以我退后一步。 我的第一个问题是,现在socket.on('connect')重复发生,即使连接成功,也不会停止。 我的客户端console.log只是继续前进。 这里是客户端:

  // Connect the user socket.on('connect', function(){ var currentUserId = '<%= currentUser.id %>'; // Add user to redis socket.emit('login', { userID: currentUserId}); // Retrieve presence info socket.emit('presence'); }); // Show Presence socket.on('presence', function(data) { var userID = data.user; var presence = data.presence; if (presence) { $('#red-dot-' + userID).css("display", "none"); $('#green-dot-' + userID).css("display", "inline"); // Show the hangout button $('#hangout-' + userID).show(); $('#hangout-unavail-' + userID).hide(); } else { $('#red-dot-' + userID).css("display", "inline"); $('#green-dot-' + userID).css("display", "none"); } }); 

和服务器端:

  io.sockets.on('connection', function (socket) { var savedUserID; socket.on('login', function(data){ var userID = data.userID; savedUserID = userID; // add first user redis.sadd("users", userID); redis.hmset("users:"+userID, "socketID", socket.id, "userID", userID); }); socket.on('presence', function(){ // Get the list of online users and show Presence redis.smembers("users", function(err,results) { var onlineUsers = results; for (var i in onlineUsers) { var userID = redis.hget("users:"+onlineUsers[i],"userID", function(err,reply) { var userID = reply; // Emit presence io.sockets.emit('presence', { user: userID, presence: "true" }); }); } }); }); 

正如你所看到的,我手动将用户添加到redis。

我在这个Google Group线程中find了答案。

发生这个问题,因为我有socket.emit('presence'); 在我的socket.on('connect', function(){}); 客户端。

这又调用了socket.on('presence', function(){}); 服务器端,这是问题。