Ошибка использования данных сеанса фляги в пространстве имен SocketIO

Я пытаюсь прослушать новые соединения socketIO в пространстве имен идентификатора пользователя. Идентификатор пользователя хранится в объекте сеанса колбы.

 @socketio.on('connect', namespace=session['userId'])
 def test_connect():
    emit('newMessage')

Этот код вызывает следующую ошибку:

raise RuntimeError('working outside of request context')

Как я могу заставить вышеупомянутый слушатель соединения работать в контексте запроса?

Спасибо!

1 ответ

К сожалению, этого сделать нельзя, поскольку пространства имен не являются динамическими, в качестве пространства имен необходимо использовать статическую строку.

Идея пространства имен в SocketIO состоит не в том, чтобы добавлять информацию о соединении, а в том, чтобы позволить клиенту открыть более одного отдельного канала с сервером. Пространства имен позволяют протоколу SocketIO мультиплексировать все эти каналы в одно физическое соединение.

Что вы хотите сделать, это предоставить входной аргумент соединения на сервер. Для этого просто добавьте значение к вашей полезной нагрузке:

@socketio.on('connect', namespace='/chat')
def test_connect():
    userid = session['userId']
    # ...
Другие вопросы по тегам