Flask-socketio在OSCserver线程中发出函数

时间:2016-04-22 12:07:33

标签: python multithreading sockets osc flask-socketio

我正在创建一个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部分

中收到

0 个答案:

没有答案