点击系统获得点击次数,socket.io和Javascript

时间:2016-01-24 16:01:26

标签: javascript socket.io

我有一个应用程序,我正在计算对象客户端的点击次数,发送到服务器

   socket.emit('playerScore',score);

推送到阵列服务器端

    socket.on('playerScore',function(data){ 
    socket.score = data;
    score.push(socket.score);

然后发送回客户

    io.sockets.emit ('scores',score);

但它从每个客户端收到一次得分,并将其发送给客户一次。我试图比较从服务器端客户端发送的分数,并发回最高数字,以与客户端已有的本地分数进行比较。但我不止一次发送它,我的过滤器似乎无法正常工作。

var scoreData = data;
      var largest = scoreData[0];
for (var i = 0; i < score.length; i++) {
    if (largest < scoreData[i] ) {
        largest = scoreData[i];
    }
}

谢谢

2 个答案:

答案 0 :(得分:0)

我认为你应该只传递最高分(从服务器到客户端)而不是整个数组。得分最高,您的客户可以检查他是否将其存储在本地。

但也许你可以有更好的方法:

  1. 你的阵列可能有:

    {     socketId:'123123',     得分:12 }

  2. 当服务器收到分数时,请按分数和socketId

  3. 从分数最高的数组中获取对象

  4. 将其传递给所有客户

  5. 有了这个,你的客户端可以直接用id而不是得分来比较。

答案 1 :(得分:0)

服务器

var scores = [];

function getHighest(arr){
    var highest = 0;

    for (var i = 0; i < arr.length; i++) {
        if (highest < arr[i] ) {
            highest = arr[i];
        }
    }
    return highest;
}



socket.on('connection', function(client) {
    client.on('join', function(data) {
        client.join("scores"); // Join socket IO Room
    });

    client.on('playerScore', function(data){ 
        scores.push(data);
        //Send to all users in scores room
        socket.in("scores").emit('scores', getHighest(scores)); 
    });
});

在客户端:

socket.emit("join"); //Join Room
socket.emit("playerScore", score);

socket.on("scores", function(highest){ 
   if(highest > myScore) console.log("Do something");
});