Socket.io混淆了用户。当我从具有其他用户ID的另一种类型键入内容,然后从第一个选项卡键入内容时,它将显示为好像第二个用户正在键入消息而不是第一个用户。 这是客户端代码:
Var socket = io("ws://localhost:4000/");
document.getElementById("message").addEventListener("keydown", (e) => {
if (e.keyCode == 13) {
e.preventDefault();
document.getElementById("sendbtn").click();
}
});
var send = () => {
if (
document.getElementById("username").value.length == 17 &&
username.length > 1
) {
socket.emit("message", document.getElementById("message").value);
document.getElementById("message").value = " ";
return false;
} else {
alert("Please enter and submit your steam username");
}
};
var setusername = () => {
socket.emit("username", document.getElementById("username").value);
};
socket.on("user", (user) => {
username = user;
});
var username = "";
var message = " ";
socket.on("message", (msg) => {
message = msg;
document.getElementById("messages").innerHTML +=
"<h1>" + username + "</h1>" + "<br>" + msg + "<br>";
});
这是服务器端代码:
var express = require("express");
var io = require("socket.io")(4000);
var fetch = require("node-fetch");
var express = require("express");
var bodyParser = require("body-parser");
/*App initalisation*/
var app = express();
/* Socket.io connection for chat */
io.on("connection", (socket) => {
var steamusername = null;
socket.on("message", (msg) => {
io.emit("message", msg);
});
socket.on("username", async (username) => {
var key = "key";
await fetch(
`http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=${key}&steamids=${username}`
)
.then((res) => res.json())
.then((json) => (steamusername = json.response.players[0].personaname));
io.emit("user", steamusername);
});
});
app.use(bodyParser.urlencoded({ extended: true }));
app.get("/chatdata", (req, res) => {
connection.query("SELECT * FROM Messages_CSGO", (error, result) => {
if (error) {
throw error;
} else {
res.send(result);
}
});
});
/* Server run */
app.listen(3000, () => {
console.log("server running");
});
有关更多信息,您可以在评论中问我,我很乐意回答您的问题。