首页 > 解决方案 > 从 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”。

player-start:每次我进入我的客户端时,他只调用一次,让所有玩家连接起来

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

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

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

我真的很感谢大家的帮助。

标签: javascriptnode.jsreactjssocket.io

解决方案


推荐阅读