我正在尝试使用uWSGI和gevent运行带有SocketIO的Flask应用程序。
uwsgi --gevent 10 --socket :5000 --module run
但是,我收到以下错误:
invalid request block size: 21573 (max 4096)...skip
这是我的代码:
from gevent import monkey
monkey.patch_all()
from flask import Flask, render_template, session, request
from flask.ext.socketio import SocketIO, emit, disconnect
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
application = app
socketio = SocketIO(app)
@app.route('/')
def index():
session['user'] = '1'
return render_template('index.html', name='simon')
@socketio.on('my event', namespace='/test')
def test_message(message):
emit('my response', {'data': message['data']})
@socketio.on('connect', namespace='/test')
def test_connect():
emit('my response', {'data': 'Connected %s' % session['user']})
@socketio.on('disconnect', namespace='/test')
def test_disconnect():
print('Client disconnected')
if __name__ == '__main__':
app.debug = True
socketio.run(app)
答案 0 :(得分:3)
问题是您使用的是二进制uwsgi
协议,但是通过http
协议访问您的服务器。尝试将--socket
替换为--http-socket
。另请参阅https://stackoverflow.com/a/32894820/179581
答案 1 :(得分:1)
我的理解是uWSGI中的gevent支持不允许使用自定义gevent服务器类,uWSGI提供了自己的。不幸的是,gevent-socketio需要自己的服务器,它是gevent的子类,因此我认为目前不可能将uWSGI与Flask-SocketIO或gevent-socketio一起使用。
有关替代方案,请参阅Flask-SocketIO documentation。