erlang获取离线玩家数据

来源:互联网 发布:恭亲王奕欣 知乎 编辑:程序博客网 时间:2024/06/05 07:10
查看离线玩家某个数据并改变值的心得


大部分项目都是一个玩家一个进程,当玩家不在线情况下,要获取玩家某个值的并且可能修改值的频率比较高,每获取一次查一次db,显然不可取。
提供了两种解决方法。


一.依赖ets储存


1.节点启动时,初始化用来储存的ets表。


2.第一次获取某个离线玩家的数据时
  先查询ets-》查询db-》更新值-》插入ets


3.当玩家上线时,把ets的值同步更新到db,并且清除ets该玩家的记录。


建议:当然,对于很重要的数据,比如每日限用次数......等,更新完ets之后还是要及时入库持久化储存比较好。




二.依赖进程的state储存
1.创建一个server进程来保存离线玩家值。


2.第一次获取某个离线玩家的数据是
  先获取db-》更新值-》放进进程state


3.当玩家上线时,把state中的值同步更新到db,并且清除state该玩家的记录。


4.在terminate处理把state的数据同步到数据库。


建议:server进程死亡并不绝对会调用terminate,所以跟第1一样,重要数据还是要实时入库。


总结:
个人常用第一种,ets的读取和储存速度比较快,但是要注意它是会消耗一定量的内存,所以也不能盲目得使用ets。
新手,纯属个人理解,表达得不够好。
原创粉丝点击