我如何防止socket.io混淆用户

时间:2020-09-25 13:33:09

标签: javascript socket.io

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");
});

有关更多信息,您可以在评论中问我,我很乐意回答您的问题。

0 个答案:

没有答案