You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask SocketIO向特定客户端Emit时遇TypeError:缺少sid参数问题

问题解决:Flask SocketIO 发送特定客户端消息时触发 TypeError

错误原因

你定义的checkping事件处理函数将sid作为第一个参数,但Flask-SocketIO默认不会向事件处理函数自动传递sid参数。当客户端触发my_event事件时,框架调用该函数时缺少sid参数,因此抛出TypeError: checkping() missing 1 required positional argument: 'sid'。

解决方案

  1. 从flask_socketio导入request对象,通过request.sid获取当前触发事件的客户端会话ID,无需将sid作为函数参数
  2. 调整事件处理函数的定义,移除多余的sid参数
  3. 在emit方法中使用room=request.sid指定消息发送到当前客户端

修改后的代码示例

from flask_socketio import SocketIO, emit, request
import subprocess

# 假设socketio是已初始化的SocketIO实例
@socketio.on("my_event")
def checkping(*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)
        # 使用request.sid指定目标客户端
        emit('final', {"data1": x, "data": listing1.stdout}, room=request.sid)
        socketio.sleep(1)

额外说明

如果需要向其他特定客户端发送消息,需提前在客户端连接时(如connect事件)记录目标客户端的sid(可存储到字典、数据库等),后续emit时直接使用该sid作为room参数即可。

内容的提问来源于stack exchange,提问作者PoojaS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:02:51