2015-02-23 3 views
1

Я пытаюсь запустить приложение Flask с помощью SocketIO с помощью uWSGI и gevent.Недопустимый размер блока запроса при использовании SocketIO с флягой и uWSGI

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

Пожалуйста, добавьте свой код к вопросу, а не как изображение или ссылку. Также описывайте запрос, который вы делаете, который вызывает эту ошибку. – davidism

ответ

1

Я понимаю, что поддержка GEvent в uWSGI не позволяет серверу пользовательских GEvent класс, который будет использоваться, uWSGI предоставляет свои собственные. К сожалению, gevent-socketio нуждается в собственном сервере, который подклассифицирован из gevent's, поэтому я думаю, что в настоящее время невозможно использовать uWSGI с Flask-SocketIO или gevent-socketio.

См. Flask-SocketIO documentation для альтернатив.

+0

Благодарим вас за четкое объяснение. Так что же использовать только модуль gevent вместо Flask-SocketIO в моем приложении Flask и использовать прокси nginx? –

+0

Возможно, это сработает, но вам нужно будет обрабатывать сокетную связь самостоятельно, звучит как много работы. Гораздо проще использовать gunicorn + nginx. – Miguel

3

Проблема в том, что вы используете протокол binary uwsgi, но получаете доступ к вашему серверу через протокол http. Попробуйте заменить --socket на --http-socket. См. Также https://stackoverflow.com/a/32894820/179581