Мое flask (python) приложение не отключается, когда пользователи выходят из браузера или закрывают вкладку, поэтому оно никогда не запускает socketio.on («отключить»). Есть ли способ, flask может обнаружить закрытие вкладки / страницы браузера и запустить событие отключения.
JavaScript:
// Join room
socket.on('connect', () => {
socket.emit('join', {'username': username, 'room':roomName});
console.log(`${username} has joined the ${roomName} room!`)
});
// Leave room
socket.on('disconnect', () => {
socket.emit('leave', {'username':username, 'room':roomName})
console.log(`${username} has left the ${roomName} room!`)
});
Python:
@socketio.on('join')
def join (данные): join_room (data ['room'])
room_reference = data['room']
username_reference = data['username']
# Clients being addded
if room_reference in list(CLIENTS.keys()):
# If username is already in the room, there is nothing to do, flask sucks
if username_reference in CLIENTS[room_reference]:
print(" Error with {} leaving {}, has lead to false disconnection!".format(username_reference, room_reference))
pass
else:
CLIENTS[room_reference].append(username_reference)
else:
CLIENTS[room_reference] = []
# If username is already in the room, there is nothing to do, flask sucks
if username_reference in CLIENTS[room_reference]:
print(" Error with {} leaving {}, has lead to no disconnection!")
pass
else:
CLIENTS[room_reference].append(username_reference)
emit('user-update', CLIENTS, room=data['room'])
send({'username':'ChatModerator', 'msg':data['username'] + " has joined the " + data['room'] + " room!"}, room = data['room'])
@socketio.on ('exit') def отпуск (data): покинуть_room (data [ 'комната'])
room_reference = data['room']
username_reference = data['username']
# Clients being deleted
if username_reference in list(CLIENTS[room_reference]):
remove_index = list(CLIENTS[room_reference]).index(username_reference)
CLIENTS[room_reference].pop(remove_index)
else:
print("\n Error occured with removing {} from {}.\n".format(username_reference, room_reference))
emit('user-update', CLIENTS, room=data['room'])
send({'username':'ChatModerator', 'msg':data['username'] + " has left the " + data['room'] + " room!"}, room = data['room'])