我在尝试从服务器向客户端发送第二次数据时遇到了 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' 的问题,或者至少客户端没有收到.
我做过的测试: 我的第一次尝试是将所有内容都粘贴到侦听器“玩家”上,但它仍然不起作用
非常感谢大家的帮助。