Как исправить проблему с отключением flask_socketio в flask (она не определяет закрытие страницы пользователя)? - PullRequest
0 голосов
/ 30 апреля 2020

Мое 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'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...