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

Python Socket.io客户端无法接收广播消息问题排查求助

解决Socket.io Python客户端无法接收后续广播消息的问题

首先咱们来定位问题根源:你的Python客户端代码里,socketIO.wait(seconds=1)只负责处理1秒内的事件,之后进入while True死循环,但这个循环没有任何处理Socket.io事件队列的逻辑——也就是说,1秒后新收到的服务器消息根本没机会被客户端处理,这就是为什么初始化时的welcome能收到,后续服务器在message事件后发的广播收不到。而网页端JS客户端是持续监听事件流的,所以不会有这个问题。

修复方案:持续处理Socket.io事件

修改Python客户端的事件等待逻辑,把原来的固定时长wait加死循环,改成持续轮询事件:

from socketIO_client import SocketIO

socket_url = "http://xxxxxxxxxxxxxx.eu-central-1.compute.amazonaws.com"
socketIO = SocketIO(socket_url, 8090, verify=False)

def welcome():
    print('welcome received')

socketIO.on('welcome', welcome)

# 持续处理事件,直到主动退出
while True:
    socketIO.wait(seconds=0.1)  # 每隔0.1秒检查一次事件队列

或者更简单,直接调用不带参数的wait(),它会一直阻塞并处理事件:

# 替换原来的wait(1)和死循环
socketIO.wait()

额外排查点(如果修复后仍有问题)

  • 版本兼容性确认:确保你用的socketIO-client版本是适配Socket.io 1.7.2的,推荐使用0.7.x版本(比如0.7.2),这个版本专门对应Socket.io 1.x系列。
  • 命名空间检查:你的服务器用的是默认命名空间/,Python客户端也是连接默认命名空间,这点没问题,但如果后续用到自定义命名空间,要确保客户端和服务器对应上。
  • 日志调试:可以给Python客户端加日志,看是否有连接断开或者错误信息:
    import logging
    logging.basicConfig(level=logging.DEBUG)
    

这样修改后,Python客户端就能持续接收服务器发送的所有welcome广播消息了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:28:00