【问题标题】:Socket 1.0 repeating connect multiple timesSocket 1.0 重复连接多次
【发布时间】:2014-09-23 21:22:53
【问题描述】:

我正在使用 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。

【问题讨论】:

    标签: node.js heroku express socket.io


    【解决方案1】:

    我在Google Group thread找到了答案。

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多