Выдать событие socketio в обработчике запросов Flask

Я работаю с Flask, python-socketio и библиотекой socket.io на стороне клиента. Во время обработки запроса POST я хотел бы отправить событие с помощью сервера socketio. Тем не менее, событие генерируется только тогда, когда я Ctrl-C общего приложения.

Я хотел бы избежать установки очереди сообщений, такой как RabbitMQ или Redis. Также невозможно отправить это событие из другого процесса, как явно указано в документации:

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

Ниже приводится документация по питон-сокетио. Редактирование: регистрация событий сервера с помощью фляги SocketIO запрашивает нечто подобное, однако принятый ответ возвращается сразу после отправки события, что, вероятно, приводит к ощущению, что событие действительно испускается до завершения запроса (я почти уверен, что это не так).

import socketio
import eventlet
from flask import Flask, render_template

sio = socketio.Server()
app = Flask(__name__)

@app.route('/my_fancy_request')
def my_fancy_request():
    # do some processing
    sio.emit('my_event') # this doesn't run until /my_fancy_request returns
    # do some more processing
    return stuff


if __name__ == '__main__':
    # wrap Flask application with socketio's middleware
    app = socketio.Middleware(sio, app)

    # deploy as an eventlet WSGI server
    eventlet.wsgi.server(eventlet.listen(('', 8000)), app)

0 ответов

Другие вопросы по тегам