javascript - 从 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'的问题,或者至少客户端没有接收到。
我所做的测试:我的第一次尝试是将所有内容都粘在听众“玩家”上,但它仍然不起作用
我真的很感谢大家的帮助。
解决方案
推荐阅读
- server - Lua 服务器客户端聊天示例
- javascript - 提交表单不做任何事情
- c# - 如何使用 C# 将多重身份验证登录到 Dynamics 365
- javascript - 如何在一个或多个重复字符的模式上拆分字符串并保留匹配?
- java - hdfs 显示本地文件列表
- bash - 检查多个文件名是否包含特定字符串
- java - Zuul API GW 作为 docker 容器还是作为 Java Spring 应用程序的一部分?
- javascript - 以编程方式从 D3 嵌套 JSON 对象创建 HTML 表
- swift - 当 nil 应该返回特定的默认值时,在函数参数中使用可选项的最简洁方法是什么?
- c++ - C ++中的十六进制与十进制