游戏中每隔 xx 分钟回复一格体力 数据库一般是怎么存储的?

2022-07-08 17:00:40 +08:00
 dfgxcvbcv

不太可能每分钟都遍历一次体力没满的用户吧

6520 次点击
所在节点    数据库
37 条回复
nightwitch
2022-07-09 02:41:52 +08:00
只是内存里的一个 actor ,不会落库,客户端自行计算。为了反作弊服务端可能会采样记录一些信息。
FakNoCNName
2022-07-09 09:24:56 +08:00
以前做过游戏,当时的逻辑是:

1. 玩家上线时:把数据从库加载到内存
2. 玩家在线时:用户基本数据在内存里面,正面状态( buff )、负面状态( debuff )实时计算并修改内存的值。
2.1 触发式更新:当玩家参加活动、做任务时,每次开始、结束写一次库。
2.2 其它累死 2.1 的场景,也使用触发式更新
3. 玩家掉线时:(不论什么原因掉线)触发写库操作
4. 服务器故障恢复:多节点组集群、使用 redis 做缓存(还会引入中间件故障恢复等问题,尽量少用)

注:
1~3 能解决大部分问题,这里采用触发式更新而不是定时(或时间轮)可以:避免 io 密集操作、玩家数据和数据库数据操作异步(偶尔遇到瓶颈也允许阻塞一小段时间)、保证玩家关键时刻的关键数据得以保存。

玩家的行为是随机的,哪怕都在做活动,大多数情况也比时间轮随机,玩家多的时候时间轮压力也不小。
FakNoCNName
2022-07-09 09:28:14 +08:00
所以你说的回血,不论前后端很可能是在内存中计算,在一个战斗节点或者战斗开始(结束)的时候存一次库。当然定时保存也是可能的。
lscho
2022-07-09 09:48:45 +08:00
研究过外挂的应该都知道,血量 /体力 /攻击力等值一般都是登录的时候初始化到本地内存中的。。。然后战斗结算 /任务结算的时候才会与服务端通讯。

当然有反作弊系统的话,即使不结算也会随机检测一下,数值不对就踢下线。
nekochyan
2022-07-09 10:12:20 +08:00
体力这个肯定是前端向后端查询的时候才实时更新,然后其他时间前端起一个定时器去计算倒计时、什么时候恢复之类的
dabaibai
2022-07-09 10:59:25 +08:00
上线才会处理
x86
2022-07-09 11:07:29 +08:00
本地内存中计算的,你看看那些锁血之类的修改差不多都一个原理
Exdui
2022-07-09 11:10:05 +08:00
@rekulas 粉丝登录 facebook 之后,查询一下有没有给他推送的消息?
还是博主发帖时候,顺便把内容推送给所有关注的粉丝?
junwind
2022-07-09 11:47:22 +08:00
游戏中一般是存在内存数据库中的,定期落地, 可以根据实际用的语言,框架, 比如 workerman 可以用定时器,或者定时任务来处理, 更新后推送一下到前端即可
bruce0
2022-07-09 11:51:51 +08:00
数据都在内存里,每次修改数据会同步到数据库, 像这种每小时恢复多少的, 一般都是记录一个时间, 比如上次恢复的时间戳, 每次获取数据的时候, 计算一下当前应该恢复到多少. 也有一些特殊的情况, 需要用一个定时器, 定时计算的, 这种情况非常少了
Torpedo
2022-07-09 16:10:38 +08:00
为啥不用定时器啊,这不很正常么。这种类似的模型,编程语言里不就有,比如 js
dfgxcvbcv
2022-07-09 16:37:26 +08:00
@Torpedo #31 用定时器玩家下线后怎么办?
Torpedo
2022-07-09 17:58:31 +08:00
@dfgxcvbcv 这不是典型的用了事件,记得清除副作用么
yyt6801
2022-07-09 20:30:01 +08:00
中间件??? 这种数据不会和数据库直接交互吧,都是在内存中
hhjswf
2022-07-09 23:59:12 +08:00
@Exdui 一般都是推拉结合吧
Jokerbj
2022-07-10 21:30:52 +08:00
unity 或者虚幻里面可以加个触发功能,拿时间记一下,到时间直接自动触发一下
d29107d
2022-07-10 23:28:44 +08:00
@dfgxcvbcv 下线时记录时间戳,上线时再取时间戳,然后就可以计算出这个时间段内得到的体力

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/864966

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX