use*_*585 5 python apache flask gevent-socketio flask-socketio
我使用了http://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent/page/4中的以下示例代码,当我使用测试服务器运行它时,效果很好,例如python myapp.py我可以连接到它并发送消息
from flask import Flask, render_template
from flask.ext.socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route('/')
def index():
    return render_template('index.html')
@socketio.on('my event', namespace='/test')
def test_message(message):
    emit('my response', {'data': message['data']})
@socketio.on('my broadcast event', namespace='/test')
def test_message(message):
    emit('my response', {'data': message['data']}, broadcast=True)
@socketio.on('connect', namespace='/test')
def test_connect():
    emit('my response', {'data': 'Connected'})
@socketio.on('disconnect', namespace='/test')
def test_disconnect():
    print('Client disconnected')
if __name__ == '__main__':
    socketio.run(app)
Run Code Online (Sandbox Code Playgroud)
问题是,当我将相同的代码移动到使用 Apache 为 Flask 提供服务的服务器时,我收到错误。
RuntimeError: You need to use a gevent-socketio server.
Run Code Online (Sandbox Code Playgroud)
Apache 主机的配置文件是:
 WSGIApplicationGroup %{GLOBAL}
 WSGIScriptAlias / /var/www/public/flaskApp/flaskApp.wsgi
 <Location /var/www/public/flaskApp/flaskApp/>
    Order allow,deny
    Allow from all
</Location>
Run Code Online (Sandbox Code Playgroud)
是否可以运行 SocketIO/Flask 并让它通过 Apache 工作?
Apache 运行应用程序所通过的/var/www/public/flaskApp/flaskApp.wsgi文件不使用支持 socketio 的服务器。
您正在阅读的教程指出
扩展以通常的方式初始化,但为了简化服务器的启动,
run()扩展提供了自定义方法。此方法启动 gevent,这是唯一受支持的 Web 服务器。将 Gunicorn 与 gevent 工作人员一起使用也应该可行。
uWSGI文档中有一个关于在 gevent 模式下运行的部分,但Miguel评论道:
uwsgi 也不适用于此扩展,因为它不允许使用自定义 gevent 循环。Gunicorn 确实有效,命令在文档中。
所以,古尼康。来自文档:
另一种方法是使用gunicorn作为Web服务器,使用gevent-socketio提供的工作类。以这种方式启动服务器的命令行如下所示:
Run Code Online (Sandbox Code Playgroud)gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker module:app
简而言之,确保您正在运行提供 gevent 工作线程的东西。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           5957 次  |  
        
|   最近记录:  |