>  기사  >  백엔드 개발  >  socket数据存储方面的问题

socket数据存储方面的问题

WBOY
WBOY원래의
2016-06-23 14:00:211051검색

目前用html5的websocket和php实现了socket连接,准备做个长连接的游戏,
准备做成一个服务器支持100玩家左右(上线后再尝试增加人数),一个房间/一局游戏5-8人。

现在有一个问题,当前游戏数据存在哪里好呢。(游戏结果数据会存到数据库,主要是游戏中间数据存哪)
全局变量:
存储在全局变量肯定可以实现的,性能是最好的,
但如果进程挂了,当前的游戏数据数就全部消失了,所有玩家都都得从游戏大厅重新开始
redis:
存redis是比较安全,进程挂了的话进程重启后玩家应该能继续该局游戏,
但是性能上肯定比全局变量差,不知道有没有必要这么设计。
(目前只准备租一个服务器,不知道redis会不会一起挂掉)

主要是不知道进程挂掉的概率有多大,还有使用redis对性能的影响有多大。
有没有之前做过这方面功能的传授一下这方面的经验。


回复讨论(解决方案)

期待楼主经验。

没人回答,自己想了个折中的方案:
游戏先用全局变量实现,redis作为防挂扩展功能,游戏上线后确认了服务器会挂,确实有必要后再实现。
实现方式:
1.同步方案:将每个房间的还原需要的数据单独拼接在一起,单独存入redis一个字段(名为 'room_'.$roomId)
2.同步时间:1.游戏开始时存放初始信息  2.游戏结束时清除信息  3.游戏每进行一个回合存放一次数据
3.还原方案:进程启动后,读取redis各房间数据存入全局变量。
总之现在先用全局变量实现再说...

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.