Socket io подключен одновременно к тому же socket.id - PullRequest
0 голосов
/ 18 июня 2020

Я разрабатываю чат-приложение с помощью socket io. Проблема в том, что два сокета, подключенные одновременно, производят один и тот же socket.id. Поэтому, когда сокет отключен, он удалит оба разъема. так что другой не может больше слушать. Как я могу предотвратить подключение сокета с тем же идентификатором? Спасибо.

app.post("/online", bodyP, async (req, res) => {

var userID = req.body.username;
var connectStatus;

try {
  if (onlineUsersArray.indexOf(userID) === -1) {

    connectStatus = true;
    var io_online = io.of("/online");

    io_online.on("connection", async function (socket) {

        var date = new Date().toLocaleString("en-US", { timeZone: "Asia/Singapore" });
        onlineUsersArray.push(userID.toString());

          users[socket.id] = userID;
          console.log('sessionID ' + socket.id);
          console.log(users[socket.id] + " connected at " + date);
          console.log("User in array : " + onlineUsersArray);
          console.log("Number of users connected : " + onlineUsersArray.length);

          socket.on("disconnect", function () {
            var date = new Date().toLocaleString("en-US", { timeZone: "Asia/Singapore" });

            if (onlineUsersArray.indexOf(users[socket.id]) === -1) {
              console.log(">>>>>>>>>>>>>>>> " + users[socket.id] + "Not existed in online array");
            } else {
              var indexOfConnection = onlineUsersArray.indexOf(users[socket.id]);
              onlineUsersArray.splice(indexOfConnection, 1);

              console.log("user " + users[socket.id] + " disconnected at " + date);
              console.log("Number of users connected : " + onlineUsersArray.length);
              console.log("Users Currently Online: " + onlineUsersArray);
            }
            socket.removeAllListeners();
            io_online.removeAllListeners();

          });

    });
  } else {
    console.log("user " + userID + " already in session");
    connectStatus = false;

  }

  res.status(200).send({
    status: true,
    connection: connectStatus
  });
}
catch (e) {
  res.status(200).send({
    status: false,
    result: "Failed to set online user"
  });
  logg.loggerServer("app.js - Online user error ", "0", "Failed in online " + e);
}

});

если 2 или более устройств работают одновременно, будет выдан тот же идентификатор сокета

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...