0

我对遇到的这个错误感到非常困惑,希望有人能告诉我为什么我的代码响应异常。

我做了一个简单的游戏,它应该允许客户端按下按钮 A 并向服务器发送消息“A”,然后服务器会将 A 变量加 1,并将 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 3 次才能使 A to = 3,但所有玩家都会收到彼此按下按钮的广播。有人可以告诉我为什么客户端正在接收,但服务器正在接受来自客户端的 3 个单独堆栈中的“A”吗?

4

1 回答 1

2

问题是每个客户端都与服务器建立自己的连接。您在 on-connection 函数中拥有的任何变量都将仅适用于该一个客户端。

您可以将 和 的声明移至A顶层B,因此所有连接都将访问相同的变量。

于 2012-09-09T05:14:25.057 回答