Flask SocketIO не отправляет сообщения в назначенную комнату - PullRequest
0 голосов
/ 14 июля 2020

Я создаю приложение, в котором каждый пользователь присоединяется к определенной c комнате, связанной с идентификатором, общим для других пользователей (предположим, что один администратор индивидуально подключен ко многим пользователям, но эти пользователи подключены только к этому администратору). Мне нужно сделать это автоматически, поэтому, когда они регистрируются, я выполняю автоматическое c назначение, например, при join. html:

socket.on('connect', function () {
   socket.emit('connected');
});

Что вызывает это:

@socketio.on('connected')
def connected():
    global user_unique_room_id
    if current_user.is_authenticated:
        rol = current_user.get_current_user_role()
        ...
        if rol == 'User':
            user_current_room = str(current_user.shared_id) + str(user_unique_room_id)
            join_room(user_current_room)
            models.User(id=current_user.id).update(
                    set__room = user_current_room)
            user_unique_room_id += 1

Я запоминаю комнату, поэтому, когда они отправляют сообщение, они точно знают, куда его отправить:

@routes.route('/new_message', methods=["POST"])
@login_required
def new_message():
        room = current_user.room
        socketio.emit('new_message', data, room=room)
        return jsonify(data), 202

Но это не работает. И поскольку если я сделаю это ...

socketio.emit('new_message', data, room=None)

... он фактически отправит сообщение, я чувствую, что join_room at @socketio.on('connected') неправильно назначает комнату и просто, вероятно, назначает ее None .

Чтобы уточнить, current_user.shared_id это что-то вроде 5f0c30c6593bfe9ecb6fdab3. И user_current_room выглядит примерно так:

5f0c30c6593bfe9ecb6fdab30
5f0c30c6593bfe9ecb6fdab31
5f0c30c6593bfe9ecb6fdab32
...
5f0c30c6593bfe9ecb6fdab399

На всякий случай, моя модель User выглядит так:

{'email': 'example@example.com', 'password': example, 'username': 'example', 'shared_id': 
'5f0c8f74315aa1ebe80b50a2', 'room': '5f0c8f74315aa1ebe80b50a20', 'timestamp': 
datetime.datetime(2020, 7, 14, 9, 52, 17, 322000), 'active': True, 'id': 
ObjectId('5f0d80511d1cbebeec44980b'), 'role': 'User'}

Я новичок в SocketIO, поэтому я Я почти уверен, что делаю что-то неправильно, но просто не знаю, что.

Заранее большое спасибо!

...