代码之家  ›  专栏  ›  技术社区  ›  Evan McCoy

烧瓶组未使用GEVENT/GEVENT WebSocket

  •  0
  • Evan McCoy  · 技术社区  · 6 年前

    我正在使用flask和flask socketio构建一个web接口/数据api,用于websocket通信。我想开始使用gevent/gevent websocket、gunicorn和nginx来进行负载平衡,转向更易于开发的设置。但是,在安装gevent和gevent websocket之后,在启动socketio服务器时仍会收到一条警告消息:

    WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance.
    

    根据烧瓶记录,

    当应用程序处于调试模式时,Werkzeug开发服务器仍在socketio.run()中使用并正确配置。在生产模式下,使用eventlet web服务器(如果可用),否则使用gevent web服务器。如果未安装eventlet和gevent,则使用werkzeug开发web服务器。

    这意味着gevent的使用应该作为flask socketio的一部分在后台自动化。我用pip list检查了python的安装,确认安装了gevent 1.3.4和gevent websocket 0.10.1。以下是socketio服务器的初始化代码:

    App.Py

    flaskApp = Flask(__name__)
    flaskApp.config['SESSION_TYPE'] = 'filesystem'
    Session(flaskApp)
    socketio = SocketIO(flaskApp, async_mode='threading', manage_session=False)
    
    def createApp():
        flaskApp.secret_key = "super secret"
        socketio.run(flaskApp, host='0.0.0.0', port=80)
    

    开始.py

    app.register_blueprint(monitor.blueprint)
    ...
    createApp()
    

    为什么烧瓶插座没有检测到我的gevent安装?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Miguel Grinberg    6 年前

    您引用的文档部分是指 async_mode 参数,以及默认设置的方式。你在设置 async_mode='threading' ,从而禁用异步模式的自动选择。删除参数,然后您将得到eventlet或gevent,具体取决于您安装了什么。