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该玩家的记录。
建议:server进程死亡并不绝对会调用terminate,所以跟第1一样,重要数据还是要实时入库。
总结:
个人常用第一种,ets的读取和储存速度比较快,但是要注意它是会消耗一定量的内存,所以也不能盲目得使用ets。
新手,纯属个人理解,表达得不够好。
大部分项目都是一个玩家一个进程,当玩家不在线情况下,要获取玩家某个值的并且可能修改值的频率比较高,每获取一次查一次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。
新手,纯属个人理解,表达得不够好。
阅读全文
0 0
- erlang获取离线玩家数据
- erlang节点挂掉避免玩家数据回滚
- 游戏中的离线玩家
- 游戏中的离线玩家
- 从11对战平台获取玩家数据进行分析
- Unity3D GPS获取玩家地理位置
- 采用用同步编程的方式实现跨进程异步获取数据[二]-创建玩家账号和获取角色列表
- Erlang获取当前时间
- 玩家
- 获取玩家Flash的相关信息
- erlang 数据储存
- Erlang之基本数据
- erlang 数据机构 -- array
- 获取VS2012离线语言包
- 获取VS2012离线语言包
- Xmpp获取离线消息
- 获取VS2012离线语言包
- python离线获取帮助
- Android资源收集(持续更新)
- 在数据库实例中查询v$asm相关视图的问题
- 写一个脚本checkipadd.sh,判断所输入的参数是否为正确的IP地址,如 果是就输出"This is ip address";如果不是就输出"This is not ip address" (1
- html中input(radio,checkbox)取消/选中
- Go语言并发模型:使用 context
- erlang获取离线玩家数据
- javaMail
- 数据库版本化的最佳实践!
- ios 设置状态栏文字颜色为白色
- go语言学习笔记(8) 流程控制
- 文章标题
- mysql sending data的状态导致数据库很慢及无法DDL 操作
- 从顺序表中删除所有值为x的元素(Java实现),要求时间复杂度O(n),空间复杂度O(1)
- 50条sql查询技巧