首页 > 解决方案 > 如何触发 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?
}

标签: pythonc#flasksocket.ioflask-socketio

解决方案


推荐阅读