特定iPad设备无法接收Socket.IO的group emit问题排查
特定iPad设备无法接收Socket.IO带to参数的emit消息问题
问题概况
我基于Socket.IO(后端为Flask GCP Python)开发了一款iOS双人对战小游戏,发送对战状态更新的后端代码如下:
emit("update", {"state": OutgoingMatchState.player_moved.value, "move": move, "match_id": match.id, "id": player_id}, to=[home_player.sid, away_player.sid])
此前功能运行完全正常,但测试某台特定iPad时出现异常:
- 该设备无法接收上述带有
to参数的emit消息,其他设备及模拟器均100%正常 - 对战中的另一设备能正常接收同一条消息
- 已确认目标sid存在且准确,若移除
to参数发送相同内容,该iPad可以正常接收
已尝试的排查操作
- 虽清楚可重构为按
match.id创建room来实现消息推送,但后续房间清理流程繁琐,因此优先想排查该特定设备的问题 - 尝试删除设备上的应用并新建账号,问题依旧存在
- 试过设置
namespace="\""和include_self=True,均无法解决问题 - 客户端SocketManager配置代码如下:
private lazy var socketManager: SocketManager = { let config: SocketIOClientConfiguration = [.log(false), .compress] let manager = SocketManager(socketURL: URL(string: domain)!, config: config) manager.forceNew = true manager.reconnectWait = 3 return manager }()
- 开启客户端日志(
.log(true))后,未收到与该问题相关的日志信息 - 服务器端日志显示该设备建立了两次连接,但客户端仅能感知到第一个连接的sid(
JjExeVH003_sW2MqAAAQ),完全不知道第二次连接的存在
内容的提问来源于stack exchange,提问作者Magoo
相关产品推荐
相关产品推荐

