套接字服务器向客户端广播,但不从两者接收

时间:2012-09-09 02:52:01

标签: javascript sockets socket.io

我真的很困惑我遇到的这个错误,我希望有人可以告诉我为什么我的代码响应奇怪。

我做了一个简单的游戏,应该允许客户按下按钮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”?

1 个答案:

答案 0 :(得分:2)

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

您可以将AB的声明移到顶层,这样所有连接都将访问相同的变量。