我正在创建一个Flask-socketio应用程序,我希望在收到OSC消息时发送套接字,以便通过socketio.js将其接收到Web应用程序中
from flask import Flask, render_template, copy_current_request_context, current_app
from flask_socketio import SocketIO, emit, send
from OSC import OSCClient, OSCMessage, OSCServer
import time, threading
app = Flask(__name__)
socketio = SocketIO(app)
client = OSCClient()
client.connect( ("localhost", 62345))
receive_address = ('localhost', 62346)
server = OSCServer(receive_address)
# simple callback functions
def answer_handler(addr, tags, stuff, source):
with app.app_context():
socketio.emit('tempo', 1)
# adding callback functions to listener
server.addMsgHandler("/puredata", answer_handler)
if __name__ == '__main__':
#Start OSCServer in extra thread
st = threading.Thread( target = server.serve_forever )
st.daemon = True
st.start()
print('OSC server is started')
socketio.run(app, host='0.0.0.0')
即使我没有收到错误消息,也没有从javascript端接收套接字,因为在另一个线程中调用emit函数,并且与请求上下文存在冲突。
我根据其他一些stackoverflow票据尝试了几件事:
socketio = SocketIO(app, async_mode='threading')
在处理函数
之前添加此行@copy_current_request_context
或者在回调中重新创建一个socketio实例
def answer_handler(addr, tags, stuff, source):
socketio_connection = SocketIO(app)
with app.app_context():
socketio_connection.emit('tempo', 1)
但是这些解决方案都没有起作用,我需要将这个'上下文'问题集成到我的线程中。 请注意:
socketio.emit('tempo', 1)
在这个帖子中工作得很好,并在javascript部分
中收到