Выдать событие 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)