如何等待传递给Flask SocketIO';s emit()?

如何等待传递给Flask SocketIO';s emit()?,flask,callback,socket.io,blocking,flask-socketio,Flask,Callback,Socket.io,Blocking,Flask Socketio,Flask SocketIO中是否有一个阻塞/同步emit('event',callback)函数,该函数在返回之前等待传递给它的回调 或——是否有一种方法可以直接调用@socketio.on('event')处理程序中的回调,而不是从该处理程序中简单地返回 这就是我的具体情况: 服务器 @socketio.on('serverGiveData')) def处理程序(msg): emit('workerGiveData',msg,callback=server\u callback) 返回#当

Flask SocketIO
中是否有一个阻塞/同步
emit('event',callback)
函数,该函数在返回之前等待传递给它的回调

——是否有一种方法可以直接调用
@socketio.on('event')
处理程序中的回调,而不是从该处理程序中简单地返回


这就是我的具体情况: 服务器
@socketio.on('serverGiveData'))
def处理程序(msg):
emit('workerGiveData',msg,callback=server\u callback)
返回#当服务器_callback()被回调时
def服务器_回调(数据):
打印('从工作者接收的数据')
#这里我想调用client_callback(),即。
#在调用此服务器回调()之前,我不希望handler()返回
工人
def处理程序(args,回调);
回调(数据)
socketIO.on('workerGiveData',handler)

(我知道当工作人员以
browser\u callback()

我希望避免这种混乱。)

Socket.IO协议是基于事件的,而不是基于请求/响应的。我建议您不要使用回调,这些回调用于快速确认已收到事件,而不是在完成某些工作后提供结果

请尝试使用新事件替换回调:

+-----------------+                            +----------------------+                         +----------------------+
|     Browser     |  emit('serverGiveData’)    |        Flask         |  emit('workerGiveData', |       Worker         |
|  (webapp, JS)   |                            |      web server      |       server_callback)  |   (Python program)   |
|                 | +------------------------> |                      | +-------------------->  |                      |
|                 |                            |                      |                         |                      |
| socket.io 1.7.3 |  emit(‘dataForBrowser’)    | Flask-SocketIO 2.8.2 |          data           |socketiIO-client 0.7.2|
|                 | <------------------------+ |                      | <--------------------+  |                      |
|                 |                            |                      |                         |                      |
+-----------------+                            +----------------------+                         +----------------------+
+--------------+-------------------------++----------------------+
|浏览器| emit('serverGiveData')| Flask | emit('workerGiveData',| Worker|
|(webapp,JS)| | web服务器|服务器|回调)|(Python程序)|
|                 | +------------------------> |                      | +-------------------->  |                      |
|                 |                            |                      |                         |                      |
|socket.io 1.7.3 | emit('dataForBrowser')| Flask SocketIO 2.8.2 | data | SocketIO客户端0.7.2|
|                 |
+-----------------+                            +----------------------+                         +----------------------+
|     Browser     |  emit('serverGiveData’)    |        Flask         |  emit('workerGiveData', |       Worker         |
|  (webapp, JS)   |                            |      web server      |       server_callback)  |   (Python program)   |
|                 | +------------------------> |                      | +-------------------->  |                      |
|                 |                            |                      |                         |                      |
| socket.io 1.7.3 |  emit(‘dataForBrowser’)    | Flask-SocketIO 2.8.2 |          data           |socketiIO-client 0.7.2|
|                 | <------------------------+ |                      | <--------------------+  |                      |
|                 |                            |                      |                         |                      |
+-----------------+                            +----------------------+                         +----------------------+