2016-08-04 9 views
1

SocketIOイベントコンテキストからソケットメッセージを外部に送信しようとすると、メッセージはクライアントに届きません。コンテキストの外側Flask SocketIOイベントコンテキストから外部にイベントを送信する

方法:

@main.route('/import/event', methods=['POST']) 
def update_client(): 
    from .. import socketio 
    userid = request.json['userid'] 
    data = request.json 
    current_app.logger.info("New data: {}".format(data)) 
    current_app.logger.info("Userid: {}".format(userid)) 
    socketio.emit('import', data, namespace='/events', room=userid) 
    return 'ok' 

私も試みた:方法update_clientが呼び出される

@socketio.on('connect', namespace='/events') 
def events_connect(): 
    current_app.logger.info("CONNECT {}".format(request.namespace)) 
    userid = request.sid 
    current_app.clients[userid] = request.namespace 

'on.connect' SocketIOコンテキストに

with current_app.app_context(): 
     socketio.emit('import', data, namespace='/events', room=userid) 

スレッドから。クライアント側で

$(document).ready(function(){ 
    var socket = io.connect('http://' + document.domain + ':' + location.port +'/events'); 
    var userid; 

socket.on('connect', function() { 
    console.log("on connect"); 
}); 

socket.on('import', function (event) { 
    console.log("On import" +event); 
}); 

私は、メッセージがクライアントに到着し、ログメッセージがプリントされ@socketio.on('connect')方法でemit('import', 'test')を呼び出します。

ドキュメントの例があります:

@app.route('/ping') 
def ping(): 
    socketio.emit('ping event', {'data': 42}, namespace='/chat') 

私は何かを欠場か、なぜクライアントでメッセージ到着していませんか?

編集:

socketioが

socketio = SocketIO() 
create_app(): 
    app = Flask(__name__) 
    socketio.init_app(app) 

manage.py

from app import socketio 
if __name__ == '__main__': 
    socketio.run(app) 

フラスコSocketIOの== 2.6

eventlet app/__init__.py関数で作成され== 0.19。 0

答えて

0

解決策が見つかりました。

フラスコの内部サーバーでアプリケーションを実行すると、メッセージはクライアントによって受信されません。

python manage.py run 

しかし、私はgunicornで魔法のようにすべての作品を、サーバーを実行したとき。

ここでの解決策は、イベントレットでガンコーンを使用することです。

gunicorn --worker-class eventlet -w 1 manage:app 

私はFlask-Migrate 2.0でFlask 0.11を使用します。 Flask 0.11には新しい起動コマンドがあるので、私は何かを見逃していたかもしれません。

関連する問題