点击次数、socket.io和Javascript的评分系统

点击次数、socket.io和Javascript的评分系统,javascript,socket.io,Javascript,Socket.io,我有一个应用程序,我正在计算对象客户端的点击次数,并发送到服务器 socket.emit('playerScore',score); 推送到阵列服务器端 socket.on('playerScore',function(data){ socket.score = data; score.push(socket.score); 然后发送回客户端 io.sockets.emit ('scores',score); 但它从每个客户机接收一次分数,并为每个客

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

   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];
    }
}
var scoreData=数据;
var最大=得分数据[0];
对于(变量i=0;i

谢谢

我认为您应该只通过最高分数(从服务器到客户端),而不是通过整个阵列。如果得分最高,您的客户可以检查是否将其存储在本地

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

  • 您的阵列可能有:

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

  • 当服务器收到分数时,推送分数和socketId

  • 从得分最高的数组中获取对象

  • 将其传递给所有客户


  • 这样,您的客户端就可以直接按id进行比较,而不是按分数进行比较。

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

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

  • 您的阵列可能有:

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

  • 当服务器收到分数时,推送分数和socketId

  • 从得分最高的数组中获取对象

  • 将其传递给所有客户


  • 这样,您的客户端就可以直接按id进行比较,而不是按分数进行比较。

    服务器:

    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");
    });
    

    服务器:

    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");
    });
    


    你不想让所有的用户都获得最高分数?是的,所有的用户都获得最高分数,这样他们就可以将自己的分数与本地存储的分数进行比较?我不明白你不止一次地将它发送到哪里,你能提供完整的代码吗?服务器会为每个客户端获得分数,并将其存储到阵列中,然后将阵列发送到连接的客户端。但是,如果服务器从客户端收到2个分数,它将发送两次数组,一次发送一个分数,第二次发送两个分数。啊,您只想发送最高分数,而不是同时发送所有分数,现在更清楚了;)你不想让所有的用户都获得最高分数?是的,所有的用户都获得最高分数,这样他们就可以将自己的分数与本地存储的分数进行比较?我不明白你不止一次地将它发送到哪里,你能提供完整的代码吗?服务器会为每个客户端获得分数,并将其存储到阵列中,然后将阵列发送到连接的客户端。但是,如果服务器从客户端收到2个分数,它将发送两次数组,一次发送一个分数,第二次发送两个分数。啊,您只想发送最高分数,而不是同时发送所有分数,现在更清楚了;)通过这个,我仍然从服务器接收到三个变量?我假设分数为scores.push(分数);只是一个分数,您将向“playerScore”发送什么类型的数据?每个客户端都会发送他们的分数,因此分数。push(分数)将为每个连接的客户端接收分数。客户端的过滤工作正常。如果他们赢了,我会发出警报。但我会向每个套接字发送警报,通知连接了多少个客户端。e、 g.2 sockets connected=每个套接字2个警报,比较发送分数和他们自己的分数。这只是一个变量,但每个客户端发送一次。您的问题不太清楚,请使用套接字io rooms检查我的新答案。这样,我仍然从服务器收到三个变量?我假设分数为。推送(分数);只是一个分数,您将向“playerScore”发送什么类型的数据?每个客户端都会发送他们的分数,因此分数。push(分数)将为每个连接的客户端接收分数。客户端的过滤工作正常。如果他们赢了,我会发出警报。但我会向每个套接字发送警报,通知连接了多少个客户端。e、 g.2 sockets connected=每个套接字2个警报,比较发送分数和他们自己的分数这只是一个变量,但每个客户发送一次您的问题不太清楚,请使用socket io rooms检查我的新答案。嘿,是的,您的第一句话是我试图实现的,但我无法理解。在@Marcos Casagrande的帮助下,我让它在客户端正常工作。但是我仍然收到服务器的多分嘿,是的,你的第一句话是我想要达到的,但我无法理解。在@Marcos Casagrande的帮助下,我让它在客户端正常工作。但我仍然收到服务器的多个分数