如何使用socketio运行flask服务器?

时间:2019-12-27 18:56:33

标签: python flask socket.io

我已根据本教程在烧瓶中构建了简单的Web服务器:https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world 然后我意识到我需要websocket,因为我需要客户端和服务器之间的实时通信。因此,我将其安装在venv flask-socketio库中。然后,我修改了__init__.py文件,使其看起来像这样:

from flask import Flask
from flask_socketio import SocketIO
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
import logging
from logging.handlers import RotatingFileHandler
import os


app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
socketio = SocketIO(app)

if not app.debug:
    if not os.path.exists('logs'):
        os.mkdir('logs')
    file_handler = RotatingFileHandler('logs/webserver.log', maxBytes=10240,
                                       backupCount=10)
    file_handler.setFormatter(logging.Formatter(
        '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'))
    file_handler.setLevel(logging.INFO)
    app.logger.addHandler(file_handler)

    app.logger.setLevel(logging.INFO)
    app.logger.info('Reaction test startup')

from app import routes, models, errors

if __name__ == '__main__':
    socketio.run(app)

问题是,现在当我尝试使用flask run运行服务器时,得到警告:

__ init__中的警告:Flask-SocketIO在Werkzeug下运行,WebSocket不可用。

我也看到其他人也有这个问题(https://github.com/miguelgrinberg/Flask-SocketIO/issues/894),我应该运行__init__.py脚本而不是flask运行。但是,当我尝试使用“ python app / __ init__.py”启动服务器时,导入失败,感觉好像所有依赖项都丢失了。最初我收到消息:

回溯(最近通话最近):   在第3行的文件“ app / init .py”中     从配置导入配置

因此,我决定基本上将整个配置文件重写为__init__.py脚本。但这并没有帮助,因为这样做后我收到消息:

文件“ app / init .py”,第37行,在     从应用程序导入路线,模型,错误 ModuleNotFoundError:没有名为“ app”的模块

所以我想重写Config.py文件的内容不是解决问题的方法。我的问题是,我应该如何运行我的应用程序,以便它能正确支持websocket,而无需从头开始重写它?

1 个答案:

答案 0 :(得分:1)

我已经解决了我的问题。问题是我尝试编辑__init__.py文件,而不是绑定到FLASK_APP环境变量的文件。当我添加时:

if __name__ == '__main__':
    socketio.run(app)

运行到我的FLASK_APP脚本,然后使用python server.py(这是我的脚本的名称绑定到FLASK_APP变量)从控制台运行此其他脚本,一切正常。