我有一个应用程序,我正在计算对象客户端的点击次数,发送到服务器
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];
}
}
谢谢
答案 0 :(得分:0)
我认为你应该只传递最高分(从服务器到客户端)而不是整个数组。得分最高,您的客户可以检查他是否将其存储在本地。
但也许你可以有更好的方法:
你的阵列可能有:
{ socketId:'123123', 得分:12 }
当服务器收到分数时,请按分数和socketId
从分数最高的数组中获取对象
将其传递给所有客户
有了这个,你的客户端可以直接用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");
});