V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
crimeshaper
V2EX  ›  程序员

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

  •  
  •   crimeshaper · 2020-03-24 11:06:04 +08:00 · 3628 次点击
    这是一个创建于 1709 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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



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


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

    服务端一般只判断活动时间。startTime <= now <= endTime
    kiracyan
        10
    kiracyan  
       2020-03-24 17:39:50 +08:00
    @rocbomb 看起来像明日方舟
    guixiexiezou
        11
    guixiexiezou  
       2020-03-24 18:02:12 +08:00
    一般来说活动时间都是相同的,如果不同加个 Thead 就好了,每秒检测一次
    lesloli
        12
    lesloli  
       2020-03-24 19:59:13 +08:00
    服务器记时间戳算就行,定时器在客户端走 服务器走 tick 没必要
    alexclazrey
        13
    alexclazrey  
       2020-03-24 20:03:37 +08:00 via Android
    如果需要考虑性能,那么我提供一个系统级定时器的设计逻辑,在操作系统里面运行的上千个定时器通过构成一个定时器链表,增加定时器的时候插入链表,每次只要检查链表开头的定时器就可以省掉上千次无意义的循环迭代。
    THESDZ
        14
    THESDZ  
       2020-03-25 08:24:04 +08:00 via Android
    看看 linux 内核的定时器实现
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1200 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:15 · PVG 07:15 · LAX 15:15 · JFK 18:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.