python - 如何触发 Flask-SocketIO 服务器和 C# 客户端之间的回调函数?
问题描述
嘿,我正在编写一个 Python Flask 应用程序,除其他目的外,它还必须与 C# 代码进行通信。在实践中,用户将使用 Flask 应用程序通过 Flask-SocketIO 发送数据。C# 客户端代码将接收此数据并告诉 Python 服务器已收到数据。为此,我想等待回调函数并冻结 Flask 应用程序几秒钟,直到触发回调并释放程序。
当我使用 Python 客户端(使用 SocketIO 库)时,此机制运行良好,但相同的机制不适用于 C# 客户端(我尝试了一些库,如 SocketIoClientDotNet 和 SocketIO4Net)。接收到 C# 数据但在 Flask 应用程序中未触发回调,因此应用程序不知道数据已正确接收。
所以我的问题是:当我使用 C# 客户端时,有没有办法在 Flask-SocketIO 服务器中触发回调函数?
Flask-SocketIO 服务器代码如下:
....
elif from_who=="improve":
ev = threading.Event()
socketio.emit('send data event', {'data': session["IC_to_plc"]}, callback=ack)
ev.wait(30) # blocks until ev.set() is called or 30 seconds expired
if ev.is_set():
ev.clear()
flash("DATA SENDED TO PLC")
return render_template("improve_calibration/IC_2.html")
else:
ev.clear()
flash("NOT POSSIBLE TO CONNECT TO PLC.")
return render_template("improve_calibration/IC_2.html")
回调函数是:
def ack():
nonlocal ev
ev.set() # unblock HTTP route
C#“事件”函数是(SocketIOClientDotNet 库):
socket.On("send data event", (data) =>
{
Console.WriteLine(data);
//How to inform the server with a callback that data is correctly received without emitting another
//event?
}
解决方案
推荐阅读
- html - BeautifulSoup 匹配错误的类
- javascript - 如何使用 w3.css 作为框架以角度显示模态对话框?
- node.js - 为 Vue 应用程序前端和 node.js 后端配置 nginx
- reactjs - 在 componentDidMount 中调度一个动作,该动作接收一个 redux 道具作为有效负载
- javascript - HTML onclick 没有运行功能
- java - 并发:如何防止两个不同类中的两个方法同时运行?
- python - 如何在 Python 中接收用户输入的 Dictionary 函数?
- docker - Kubernetes 并行化目录中的多个样本
- perl - 为什么这个 perl 排序没有按预期工作?
- python - 制作像逻辑回归这样的随机森林输出