Колба-розетка с Werkzeug

Мой старый код, я использую werkzeug run_simple для запуска приложения. Теперь мне нужно использовать socketio, как я могу изменить run_simple() на socketio.run().

Мой старый код:

from werkzeug.serving import run_simple
from werkzeug.wsgi import DispatcherMiddleware

from admin import api, frontend

application = DispatcherMiddleware(frontend.create_app(), {
'/api': api.create_app()
})


if __name__ == '__main__':
    run_simple('0.0.0.0', 5000, application, use_reloader=True, use_debugger=False)

Я старался:

from werkzeug.serving import run_simple
from werkzeug.wsgi import DispatcherMiddleware
from flask.ext.socketio import SocketIO
from admin import api, frontend

app = frontend.create_app()
application = DispatcherMiddleware(frontend.create_app(), {
    '/api': api.create_app()
})

socketio = SocketIO(app)

if __name__ == '__main__':
    # run_simple('0.0.0.0', 5000, application, use_reloader=True, use_debugger=False)
    socketio.run(app, host='0.0.0.0', port=5000, use_reloader=True, use_debugger=False)

но это не сработало. Кто-нибудь может мне помочь !


person DonerKebab    schedule 04.09.2015    source источник
comment
Вы пытались передать application SocketIO?   -  person dirn    schedule 04.09.2015
comment
Flask-SocketIO сильно зависит от Flask. Вы используете Flask или просто Werkzeug?   -  person Miguel    schedule 05.09.2015
comment
@dirn я пробовал, но не получилось :(.   -  person DonerKebab    schedule 07.09.2015
comment
@ Мигель: они оба.   -  person DonerKebab    schedule 07.09.2015
comment
@PhươngNguyễn Единственная очевидная проблема, которую я вижу в вашем коде, заключается в том, что вы инициализируете расширение socketio с помощью app, но затем помещаете другой экземпляр приложения в промежуточное программное обеспечение диспетчера. Эти два должны быть одним и тем же экземпляром. Кроме этого, я не могу сказать. Было бы полезно, если бы вы описали, как это не работает для вас, и включили любые ошибки или трассировки стека, которые вы получаете.   -  person Miguel    schedule 07.09.2015
comment
Я также делаю то же самое (пытаюсь использовать веб-сокеты в своем проекте, вдохновленном в основном Flask Overholt). Нашли ли вы какое-либо решение для вашей проблемы. Не могли бы вы опубликовать свое решение здесь, если вы его нашли?   -  person Waseem    schedule 01.01.2016


Ответы (1)


Похоже, что это достижимо путем переноса и замены атрибута wsgi_app приложений Flask, как описано здесь.

app = frontend.create_app()

app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
    '/api': api.create_app()
})

socketio = SocketIO(app)

if __name__ == "__main__":
    socketio.run(app, host='0.0.0.0', port=5000, use_reloader=True, use_debugger=False)
person hillmark    schedule 11.07.2016