Используйте UID для излучения на колбу - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь создать Skype Web, используя flask и flask_socketio, я уже знаю, что должен использовать параметр room при отправке для отправки личного сообщения, но примеры, которые я видел до сих пор, используют SID,который изменяется, если пользователь перезагружает страницу. Поэтому у каждого пользователя, который входит в систему, есть свой идентификатор, но я не знаю, как заставить его работать на emit ('an_event', room = id). Как получить номер, отправленный на мой пользовательский идентификатор вместо идентификатора сеанса?

Редактировать: другим способом, есть ли способ сделать SID неизменным?

1 Ответ

0 голосов
/ 21 октября 2019

Сервер Flask-SocketIO не знает ваших пользовательских идентификаторов приложения. Вам необходимо создать сопоставление между идентификаторами безопасности, назначенными каждому клиентскому соединению, и идентификаторами пользователей, которые представлены каждым из этих клиентов. Вы можете сделать это, добавив обработчики подключения и отключения. Пример:

user_to_sid = {}
sid_to_user = {}

@socketio.on('connect')
def on_connect(environ):
    user_id = authenticate_user(environ)
    user_to_sid[user_id] = request.sid
    sid_to_user[request.sid] = user_id

@socketio.on('disconnect')
def on_disconnect():
    user_id = sid_to_user[request.sid]
    del user_to_sid[user_id]
    del sid_to_user[request.sid]

Когда у вас есть сопоставление, вы можете легко найти текущий SID для данного пользователя или наоборот.

...