3

外部の値が変化したときにブロードキャストを送信しようとしています。Camonitor は、値が変更されたときにコールバックを呼び出します。接続されているすべてのクライアントに、値が変更され、更新する必要があることを通知したいと考えています。

from flask import Flask
from epics import caget, caput, camonitor
from flask_socketio import SocketIO, emit

app = Flask(__name__)
socketio = SocketIO(app)

@socketio.on('connect')
def local_client_connect():
    print "Client connected"


def update_image_data(pvname, value, **kw):
    # broadcast event
    print "Sending broadcast"
    socketio.emit('newimage')


if __name__ == "__main__":
    # start listening for record changes
    camonitor("13SIM1:cam1:NumImagesCounter_RBV", writer=None, callback=update_image_data)
    socketio.run(app, debug=True)

値が変更されたときにコールバック関数が正常に呼び出されますが、ブロードキャストは機能しません。socketio.emit を local_client_connect に移動すると、機能します。

編集: 既知の問題のようですhttps://github.com/miguelgrinberg/Flask-SocketIO/pull/213

4

1 に答える 1

1

はい、これは既知の問題ですが、非常に簡単な回避策があります。

def update_image_data(pvname, value, **kw):
    # broadcast event
    print "Sending broadcast"
    with app.app_context():
        socketio.emit('newimage')
于 2016-02-20T17:12:58.737 に答える