我真的很困惑我遇到的这个错误,我希望有人可以告诉我为什么我的代码响应奇怪。
我做了一个简单的游戏,应该允许客户按下按钮A并向服务器发送消息'A',然后将A添加1到A变量,并发送A的值(编译服务器端)回到所有的客户。我希望如果有3个用户,并且每个用户按A,那么服务器将计算A = 3.
这是我的代码:
var io = require("socket.io").listen(8888);
var http = require("http");
var url = require("url");
console.log("Server has started.");
io.sockets.on("connection", function (socket) {
var A = 0;
var B = 0;
socket.on("message", function (data) {
if (data == 'A') {
A++;
console.log(A);
}
else if (data == 'B') {
B++;
console.log(B);
}
var M = [A + '' + B]
function M(A, B) {
this.first = A;
this.second = B;
}
this.all = function() {
return A + '' + B;
}
console.log(M);
socket.emit("message", M);
socket.broadcast.emit("message", M);
});
});
结果是每个玩家似乎都在他们自己的计数器中,因此每个玩家必须按A A 3次,A = 3,但所有玩家都会收到按下按钮的广播。有人可以告诉我为什么客户正在接收,但服务器是否接受来自客户的3个独立堆栈中的“A”?
答案 0 :(得分:2)
问题是每个客户端都与服务器建立了自己的连接。您在on-connection函数中拥有的任何变量都只适用于那个客户端。
您可以将A
和B
的声明移到顶层,这样所有连接都将访问相同的变量。