将SocketIO与Flask和uWSGI一起使用时,请求块大小无效

时间:2015-02-23 17:38:53

标签: flask socket.io uwsgi gevent

我正在尝试使用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)

2 个答案:

答案 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