从 socket.io 发出的问题(服务器到客户端)

时间:2021-05-24 17:54:11

标签: javascript node.js reactjs socket.io

我在尝试从服务器向客户端发送第二次数据时遇到了 socket.io 问题

这里是带有 express 和 socket.io 的服务器代码

io.on('connection',  async function (socket) {
    let socketId = socket.id;
    const mta = new Client("20.64.24.144", 22005, "*", "*");
    
    mta.resources.evokestats.getPlayerCount()
        .then((result) => {
            console.log("result", result);
            socket.emit("players-start", { players: result })
        })
        .catch((err) => {
            console.error(`Ooops! Something went wrong ${err}`);
        });

    app.post('/player_connect', async function (req, res) {
        let ip = req.body[0];
        let player = await players.findOne({ ip: ip })

        if (player) {
            await socket.emit("players", { players: req.body[1] })
        } else {

            try {
                player = await players.create({ ip: ip, name: req.body[2] })
                await socket.emit("players", { players: req.body[1] })
                await socket.emit("last_24_players", { players: 1 });
            } catch (error) {
                console.log("error", error)
            }

        }


        res.send("connected")
    });
    });

这是我的带有 reactjs 和 socket.io 的客户端

 useEffect(() => {
        getStats();
    }, [])

   async function getStats(params) {
   
      

       socket.on("players-start", function (data) {
           setNowPlayers(data.players)
       });

       socket.on("players", function (data) {
           console.log("players", data)
           setNowPlayers(data.players)
       });});

在我使用 react 的客户端中,在 useEffect 中,我会听到“players-start”和发出的“players”。

players-start:我第一次进入我的客户端,他只调用一次,让所有玩家都连接

玩家:每次有人连接到游戏服务器时,都会向我的服务器发出一个 post 调用,在那里我使用带有套接字的 express,在 url '/player_connect' 中,然后立即发出

问题:每当我在 'players-start' 上发出问题,然后立即进入调用 url '/player_connect' 的游戏服务器时,它不会触发 'players' 的问题,或者至少客户端没有收到.

我做过的测试: 我的第一次尝试是将所有内容都粘贴到侦听器“玩家”上,但它仍然不起作用

非常感谢大家的帮助。

0 个答案:

没有答案