基于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
相关产品推荐
相关产品推荐

