Flask套接字io无法从其他类模块工作
我有一个Flask应用程序,它使用emit通过websocket发送数据 我的Python代码如下所示。我希望在某些条件下在另一个类中触发emitFlask套接字io无法从其他类模块工作,flask,websocket,socket.io,flask-socketio,emit,Flask,Websocket,Socket.io,Flask Socketio,Emit,我有一个Flask应用程序,它使用emit通过websocket发送数据 我的Python代码如下所示。我希望在某些条件下在另一个类中触发emit class MainClass: def __init__(self): app = Flask(__name__) app.secret_key = 'any random string' self.socketio = SocketIO(app, logger=True, binary=Tr
class MainClass:
def __init__(self):
app = Flask(__name__)
app.secret_key = 'any random string'
self.socketio = SocketIO(app, logger=True, binary=True, engineio_logger=True,
always_connect=True, async_mode='eventlet')
self.socketio.init_app(app, cors_allowed_origins='*')
self.socketio.on_event('on-record', self.record, namespace='/audio')
self.AC = AnotherClass(socketio=self.socketio)
def run_app(self):
self.socketio.run(self.app, debug=True, port=8000)
def record(self, some_other_data):
# This function gets triggered when client emit
# I inserted the following emit to test if this works
self.socketio.emit('send-data', {'data': data}, namespace='/audio')
class AnotherClass:
def __init__(self, socketio):
self.socketio = socketio
def send_data(self, data):
self.socketio.emit('send-data', {'data': data}, namespace='/audio')
当我从另一个class.send_数据触发emit函数时,我会得到以下日志,说明emit工作并发送数据,但是客户端应用程序不会接收数据。相反,相同的emit在MainClass.record中起作用,这是当客户端发出某些东西时触发的事件。(我插入了emit to test,在这种情况下可以工作,理想情况下,它不应该在record函数中。)
有人能告诉我我做错了什么吗?据我所知,你发布的代码没有任何问题。实际上没有办法检测哪个类正在调用
emit()
,因此,如果原始类之外的所有其他东西都是相同的,那么这应该是有效的。我知道您肯定这不是客户机问题,但仍然应该在问题中添加客户机代码,并添加工作案例。在某个地方一定有你没有考虑到的差异。谢谢你的建议,这绝对是有意义的。我将添加工作代码和客户代码。我已经用工作案例和客户代码更新了问题。如果你能对更新后的代码有所了解,那就太好了,因为我可能忽略了代码中的某些内容。仍然没有什么明显的错误。我相信你仍然没有准确地解释这两者之间的区别。例如,虽然您提供了有关如何触发工作emit的详细信息,但在辅助类中没有提到emit,并且您显示的代码也没有调用该类。
cedb89204e80438da86361a97f6f1bac: Sending packet MESSAGE data 51-/audio,["send-data",{"data":{"_placeholder":true,"num":0}}]. cedb89204e80438da86361a97f6f1bac: Sending packet MESSAGE data <binary>
var socketio = io.connect('0.0.0.0:8000' + '/audio', {transports: ['websocket']});
socketio.on("send-data", function(data) {
// Log when client receives the data from server-side
console.log("Data received");
}
})