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

socket server broadcasting to clients, but not receiving from both

本文关键字:服务器 客户端 广播 套接字      更新时间:2023-09-26

我真的被我遇到的这个错误弄糊涂了,希望有人能告诉我为什么我的代码响应奇怪。

我做了一个简单的游戏,应该允许客户端按下按钮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=3,但所有玩家都会收到对方按下按钮的广播。有人能告诉我为什么客户端正在接收,但服务器正在从客户端接收3个独立堆栈中的"A"吗?

问题是每个客户端都有自己的服务器连接。on-connection函数中的任何变量都只能用于该客户端。

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