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

基于Socket与Cookie的多人井字棋游戏“再来一局”按钮引发玩家信息同步异常问题求助

基于Socket与Cookie的多人井字棋游戏“再来一局”按钮引发玩家信息同步异常问题求助

嗨各位大佬,我最近用Socket和Cookie做了个双人井字棋游戏,支持玩家自定义名字和颜色,游戏结束后还有个“再来一局”按钮重置棋盘。本来一切都好好的,结果碰到个奇怪的bug:

第一次游戏时玩家1叫p1、颜色红,玩家2叫p2、颜色蓝,完全正常;但点了“再来一局”重置棋盘后,玩家1的名字和颜色居然变成了p2和蓝色,俩玩家显示的信息完全一样了!不过游戏本身还能区分玩家身份,就是显示的个人信息串了,这可太头疼了。

我感觉问题可能出在服务端或者重置逻辑里,先贴一段我觉得可能相关的服务端代码:

app.get('/', (req, res) => {
  if (req.cookies.nickName && req.cookies.color) {
    res.sendFile(__dirname + '/static/html/index.html'
    // 后续代码暂时省略,主要是处理已登录玩家进入游戏的逻辑
  }
})

我自己初步琢磨了下可能的原因,但拿不准:

  • 会不会是“再来一局”的Socket事件处理里,重置棋盘的时候不小心覆盖了玩家1的Cookie信息?
  • 或者服务端存储玩家信息的时候,没有用唯一标识(比如Socket ID)绑定,而是用了全局变量,重置的时候把玩家2的信息覆盖到了玩家1的条目里?
  • 还有可能前端在重置后,错误地从Socket广播里接收了其他玩家的信息,而没有读取本地自己的Cookie?

有没有大佬碰到过类似的问题,或者能给我点排查方向?如果需要更多代码(比如“再来一局”的处理逻辑、Socket玩家信息管理的代码),我随时可以贴出来!

备注:内容来源于stack exchange,提问作者Lunisen123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:08:13