当使用 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'
在探索docs后终于让它工作了。据此,每个连接的设备都被分配了一个唯一的会话 ID。因此我们可以用 request.sid 引用 sid 并定义如下。
sid = request.sid
emit('final', {"data1":x, "data":listing1.stdout}, room=sid)