套接字1.0重复连接多次

时间:2014-07-31 19:21:40

标签: node.js heroku express socket.io

我使用的是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。

1 个答案:

答案 0 :(得分:1)

我在Google Group thread找到了答案。

问题出现是因为我的socket.emit('presence');客户端有socket.on('connect', function(){});

这又称为socket.on('presence', function(){});服务器端,这就是问题所在。