Flask SocketIO 使用 sid 发送到特定客户端

问题描述 投票:0回答:1

当使用 Flask SocketIO 发送到特定客户端(而不是默认广播模式)时,我遇到了将 room=sid 放在发送部分中的问题,该部分显示下面的消息。

TypeError: checkping() missing 1 required positional argument: 'sid'

下面是我的 myapp.py 文件,其中包含 socketIO 发射。

@socketio.on("my_event")
def checkping(sid, *args, **kwargs):
    for x in range(5):
        cmd = 'ping -c 1 8.8.8.8|head -2|tail -1'
        listing1 = subprocess.run(cmd,stdout=subprocess.PIPE,text=True,shell=True)
        emit('final', {"data1":x, "data":listing1.stdout},room=sid)
        socketio.sleep(1)

使用上面的方法时,emit 永远不会工作并给出以下错误消息:

TypeError: checkping() missing 1 required positional argument: 'sid'
python socket.io flask-socketio
1个回答
0
投票

在探索docs后终于让它工作了。据此,每个连接的设备都被分配了一个唯一的会话 ID。因此我们可以用 request.sid 引用 sid 并定义如下。

sid = request.sid
emit('final', {"data1":x, "data":listing1.stdout}, room=sid)
© www.soinside.com 2019 - 2024. All rights reserved.