'socket.on() getting fired when there is no emit happening from the client
My socket.on() of "login_user" is getting fired automatiicaly from all sockets connected to the server when there is a emit("login_user") from a single specific socket.
io.on('connection', socketManage)
socketManage:
console.log("=====================")
console.log(moment().format('DD-MM-YYYY HH:mm:ss'), "Made socket connection", socket.id,);
var res = await db.SocketsModel.create({
socket_id: socket.id
});
io.emit("on_connect", socket.id);
socket.on("login_user", async (user_id) => {
console.log(chalk.green(moment().format('DD-MM-YYYY HH:mm:ss') , socket.id, "stepping into login_user", user_id));
const exisSocket = await db.UserSocketsModel.findOne({
where: {
user_id: user_id,
disconnected_on: null
}
});
if (exisSocket) {
console.log(chalk.red(moment().format('DD-MM-YYYY HH:mm:ss'),socket.id, "Non disconnected user socket found",user_id));
await db.UserSocketsModel.update(
{
disconnected_on: moment().format('YYYY-MM-DD HH:mm:ss'),
},
{
where: { id: exisSocket.id }
});
console.log(chalk.green(moment().format('DD-MM-YYYY HH:mm:ss'),socket.id, "Non disconnected user socket disconnected",user_id));
}
var res = await db.UserSocketsModel.create({
socket_id: socket.id,
user_id: user_id,
connected_on: moment().format('YYYY-MM-DD HH:mm:ss')
});
console.log(chalk.green(moment().format('DD-MM-YYYY HH:mm:ss'),socket.id, "New User socket inserted",user_id));
const userRooms = await db.UserRoomsModel.findAll({
where: {
user_id: user_id,
},
select: ['room_id']
});
if (userRooms && userRooms.length > 0) {
let room_ids = [];
console.log(chalk.green(moment().format('DD-MM-YYYY HH:mm:ss'),socket.id, userRooms.length + " User rooms found", user_id));
userRooms.forEach(element => {
room_ids.push(element.room_id)
});
socket.join(room_ids);
console.log(chalk.green(moment().format('DD-MM-YYYY HH:mm:ss'),socket.id, "User Joined in all rooms", user_id));
}
else {
console.log(chalk.red(moment().format('DD-MM-YYYY HH:mm:ss'),socket.id, "No User rooms found", user_id));
}
});
As you can see the logs :
17-03-2022 12:24:00 Made socket connection XS5hmzs2uPNJDTtHAAAB // From user 13
17-03-2022 12:24:01 XS5hmzs2uPNJDTtHAAAB stepping into login_user 13 // From user 13
17-03-2022 12:24:01 XS5hmzs2uPNJDTtHAAAB New User socket inserted 13 // From user 13
17-03-2022 12:24:01 XS5hmzs2uPNJDTtHAAAB No User rooms found 13 // From user 13
17-03-2022 12:24:13 Made socket connection jn-AWDo8HefLjwe3AAAD // This is from user 16
// Now user 13 is not triggering anything . But in server it gets fired automatically
17-03-2022 12:24:13 XS5hmzs2uPNJDTtHAAAB stepping into login_user 13
17-03-2022 12:24:13 XS5hmzs2uPNJDTtHAAAB Non disconnected user socket found 13
17-03-2022 12:24:13 XS5hmzs2uPNJDTtHAAAB Non disconnected user socket disconnected 13
17-03-2022 12:24:13 XS5hmzs2uPNJDTtHAAAB New User socket inserted 13
17-03-2022 12:24:13 XS5hmzs2uPNJDTtHAAAB No User rooms found 13
17-03-2022 12:24:13 jn-AWDo8HefLjwe3AAAD stepping into login_user 16 // From user 16
17-03-2022 12:24:13 jn-AWDo8HefLjwe3AAAD New User socket inserted 16 // From user 16
17-03-2022 12:24:13 jn-AWDo8HefLjwe3AAAD No User rooms found 16 // From user 16
As am very new to socket io, I am unable to figure this issue is in server or client side. My socket io client is mobile application written react native
Client side code :
socket.current = socketIOClient("http://192.168.1.**:****/", {
transports: ["websocket"],
forceNew: true,
upgrade: false,
reconnection: false,
user_id: "",
});
if (appStateVisible == "active") {
socket.current.connect();
socket.current.on("connect", () => console.log("socket connected"));
socket.current.on("on_connect", (socket_id) =>
socket.current.emit("login_user", User_ID, () => {})
);
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
