请问各位大佬, 1.游戏中各种活动和重置的定时怎么写。模块的定时可以公共配置,每个玩家的任务进度不同,重置时间也不同,这个怎么写? 2.玩家这里写的伪定时,也就是登陆或其他请求时刷新状态,但活动重置时间到了怎么通知玩家,比如说有免费副本,怎么刷新红点通知?
请各位大佬不吝赐教,感激不尽!
1
viakiba 2020-03-24 11:20:33 +08:00
每个玩家任务管理器可以搞个心跳(心跳去遍历所有任务的重置状态) 或者 任务管理器内部搞一个定时任务管理器取维护
|
2
hanxiV2EX 2020-03-24 11:23:40 +08:00
服务器对单个玩家的定时器写伪定时就好了,客户端写真定时器。
|
3
xcstream 2020-03-24 12:10:16 +08:00
客户端本地通知的
服务端那么多定时太复杂了 |
4
TheWalkingDead 2020-03-24 12:14:03 +08:00
定时刷新加服务器记录时间戳,客户端实时刷新。 --- 来自大佬的回答
|
5
a852695 2020-03-24 12:18:28 +08:00
游戏的技术实现为啥这么骚呢
|
6
paoqi2048 2020-03-24 12:23:47 +08:00
服务端通知时间戳+本地定时器
|
7
hanxiV2EX 2020-03-24 12:35:59 +08:00 1
如果是公共的活动开关那种,才需要在服务器做定时器的,定时器时间到了开活动再通知在线的玩家。
|
8
rocbomb 2020-03-24 12:39:21 +08:00
玩家登录时将所有数据更新一般,刷新任务什么的
之后,玩家客户端本地判断逻辑,比如这个任务是否截止 比如体力,每 6 分钟 1 点,玩家下线后,服务器就不计算了,等下次上线,一次性加上, 玩家在线时,客户端按照时间直接增加体力,不问服务器的,但是要用体力的时候,服务器就会进行计算 免费副本,也是客户端定期请求(千万不用整点请求,服务器会炸) 比如有个副本,18-20 点开,客户端每隔 10 分钟会请求一次,看看有没有活动 我们服务器的定时器非常少 |
9
xiaowangge 2020-03-24 13:05:52 +08:00
客户端轮询,查看式触发,view 请求命令
服务端一般只判断活动时间。startTime <= now <= endTime |
11
guixiexiezou 2020-03-24 18:02:12 +08:00
一般来说活动时间都是相同的,如果不同加个 Thead 就好了,每秒检测一次
|
12
lesloli 2020-03-24 19:59:13 +08:00
服务器记时间戳算就行,定时器在客户端走 服务器走 tick 没必要
|
13
alexclazrey 2020-03-24 20:03:37 +08:00 via Android
如果需要考虑性能,那么我提供一个系统级定时器的设计逻辑,在操作系统里面运行的上千个定时器通过构成一个定时器链表,增加定时器的时候插入链表,每次只要检查链表开头的定时器就可以省掉上千次无意义的循环迭代。
|
14
THESDZ 2020-03-25 08:24:04 +08:00 via Android
看看 linux 内核的定时器实现
|