Я разрабатываю чат-приложение с помощью 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 или более устройств работают одновременно, будет выдан тот же идентификатор сокета