游戏大佬前辈进,关于定时问题快疯了

2020-03-24 11:06:04 +08:00
 crimeshaper

请问各位大佬, 1.游戏中各种活动和重置的定时怎么写。模块的定时可以公共配置,每个玩家的任务进度不同,重置时间也不同,这个怎么写? 2.玩家这里写的伪定时,也就是登陆或其他请求时刷新状态,但活动重置时间到了怎么通知玩家,比如说有免费副本,怎么刷新红点通知?

请各位大佬不吝赐教,感激不尽!
3624 次点击
所在节点    程序员
14 条回复
viakiba
2020-03-24 11:20:33 +08:00
每个玩家任务管理器可以搞个心跳(心跳去遍历所有任务的重置状态) 或者 任务管理器内部搞一个定时任务管理器取维护
hanxiV2EX
2020-03-24 11:23:40 +08:00
服务器对单个玩家的定时器写伪定时就好了,客户端写真定时器。
xcstream
2020-03-24 12:10:16 +08:00
客户端本地通知的
服务端那么多定时太复杂了
TheWalkingDead
2020-03-24 12:14:03 +08:00
定时刷新加服务器记录时间戳,客户端实时刷新。 --- 来自大佬的回答
a852695
2020-03-24 12:18:28 +08:00
游戏的技术实现为啥这么骚呢
paoqi2048
2020-03-24 12:23:47 +08:00
服务端通知时间戳+本地定时器
hanxiV2EX
2020-03-24 12:35:59 +08:00
如果是公共的活动开关那种,才需要在服务器做定时器的,定时器时间到了开活动再通知在线的玩家。
rocbomb
2020-03-24 12:39:21 +08:00
玩家登录时将所有数据更新一般,刷新任务什么的
之后,玩家客户端本地判断逻辑,比如这个任务是否截止

比如体力,每 6 分钟 1 点,玩家下线后,服务器就不计算了,等下次上线,一次性加上,
玩家在线时,客户端按照时间直接增加体力,不问服务器的,但是要用体力的时候,服务器就会进行计算



免费副本,也是客户端定期请求(千万不用整点请求,服务器会炸)
比如有个副本,18-20 点开,客户端每隔 10 分钟会请求一次,看看有没有活动


我们服务器的定时器非常少
xiaowangge
2020-03-24 13:05:52 +08:00
客户端轮询,查看式触发,view 请求命令

服务端一般只判断活动时间。startTime <= now <= endTime
kiracyan
2020-03-24 17:39:50 +08:00
@rocbomb 看起来像明日方舟
guixiexiezou
2020-03-24 18:02:12 +08:00
一般来说活动时间都是相同的,如果不同加个 Thead 就好了,每秒检测一次
lesloli
2020-03-24 19:59:13 +08:00
服务器记时间戳算就行,定时器在客户端走 服务器走 tick 没必要
alexclazrey
2020-03-24 20:03:37 +08:00
如果需要考虑性能,那么我提供一个系统级定时器的设计逻辑,在操作系统里面运行的上千个定时器通过构成一个定时器链表,增加定时器的时候插入链表,每次只要检查链表开头的定时器就可以省掉上千次无意义的循环迭代。
THESDZ
2020-03-25 08:24:04 +08:00
看看 linux 内核的定时器实现

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

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

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

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

© 2021 V2EX