我试图在外部值发生变化时发送广播。当值更改时,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 https://github.com/miguelgrinberg/Flask-SocketIO/pull/213
是的,这是一个已知问题,但有一个非常简单的解决方法:
def update_image_data(pvname, value, **kw):
# broadcast event
print "Sending broadcast"
with app.app_context():
socketio.emit('newimage')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)