V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
spicecch
V2EX  ›  问与答

老哥们,请教个游戏排队的问题!

  •  
  •   spicecch · 2020-06-08 09:38:14 +08:00 · 2194 次点击
    这是一个创建于 1630 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在是 app 请求服务器排队接口开始排队,然后服务器开始排队,现在要求是服务器根据排队情况给 app 推送排名消息,app 跟据消息判断用户什么时候能进入游戏,推送消息调用的是第三方,求问下怎么实现这个排队逻辑
    第 1 条附言  ·  2020-06-08 14:19:02 +08:00
    这边场景是:游戏是放在第三方游戏平台的,app 端接第三方 SDK 展示游戏而已,游戏内的交互都是第三方处理的,我这边根据第三方服务提供的接口查询游戏服务器剩余资源,然后返回给 app 用户需不需要排队,我这边相当于就是 app 服务器吧,不是游戏服务器
    20 条回复    2020-06-08 14:29:52 +08:00
    spicecch
        1
    spicecch  
    OP
       2020-06-08 09:54:00 +08:00
    有没有游戏开发的老哥来指点一下,想听取下意见在开发
    Amance
        2
    Amance  
       2020-06-08 09:56:50 +08:00
    就是服务器给客户端推送啊,socket 处理就行了
    Otho
        3
    Otho  
       2020-06-08 10:06:58 +08:00
    你说的推送,是指什么? app 根据消失判断用户什么时候可以进入游戏,不觉得很麻烦嘛?既然能知道在排队,必然能知道什么时候可以进入游戏。
    spicecch
        4
    spicecch  
    OP
       2020-06-08 10:19:30 +08:00
    @Amance 目前是采用接口推送消息的形式通知客户端,不是长连接
    spicecch
        5
    spicecch  
    OP
       2020-06-08 10:20:21 +08:00
    @Otho 第三方推送,目前用的极光。
    th00000
        6
    th00000  
       2020-06-08 10:21:51 +08:00
    首先给 app 离线推送排队消息这种需求就不该出现, 排队是一个前台需求, 后台情况太多, 边缘很麻烦
    很容易出现用户进程被杀掉, session 被销毁, 推送了, 但是用户需要重新排队的恶心情况出现


    排队逻辑, 如果是类似 mmo 等分区服游戏, 自己在内存里实现
    如果是吃鸡等通服游戏可以用 Redis 来实现
    kop1989
        7
    kop1989  
       2020-06-08 10:23:00 +08:00
    推送透传消息的话,到达率堪忧。
    个人认为应该用长轮询或者长连接吧。否则怎么知道这个人退出了队列?
    如果不知道岂不是会导致排队的体验很差?
    Vegetable
        8
    Vegetable  
       2020-06-08 10:25:15 +08:00
    迷惑,这不成了美味不用等了吗?我排到了没及时点,还会过号吗?这好怪异啊
    jamme
        9
    jamme  
       2020-06-08 10:51:09 +08:00
    没整明白你要做的是个什么功能,游戏不都是即时的么?你用第三方推送是什么意思?排队结束,然后手机发个通知,告诉玩家排队结束进入游戏,然后需要玩家再打开游戏 app ?
    Amance
        10
    Amance  
       2020-06-08 11:19:57 +08:00
    @spicecch 那你设计不对
    Otho
        11
    Otho  
       2020-06-08 11:39:50 +08:00
    @spicecch 消息推送 这个场景不太适用。
    imherer
        12
    imherer  
       2020-06-08 13:46:57 +08:00
    排队使用推送不合理,建议把排队这块逻辑改成长连接
    imherer
        13
    imherer  
       2020-06-08 13:47:32 +08:00
    实在不行用短连接定时轮询可能都比你推送好一些
    spicecch
        14
    spicecch  
    OP
       2020-06-08 14:09:57 +08:00
    @kop1989 目前测试的消息(根据用户设备单对单推送)到达率还行,而且是实时到达的
    spicecch
        15
    spicecch  
    OP
       2020-06-08 14:11:28 +08:00
    @Vegetable 目前设计是排到队了会在 10s 内自动进入游戏
    kop1989
        16
    kop1989  
       2020-06-08 14:11:43 +08:00
    @spicecch #14 如果是前台唤醒状态,到达率当然是可使用的,但是你都用上推送了,难道不支持后台排队?
    反过来说,如果只允许前台排队的话,用长轮询或者长连接应该更贴合业务吧。最起码能知道这个人离队了。
    否则可能排个队 300 个人,前面 150 个都是空等。
    spicecch
        17
    spicecch  
    OP
       2020-06-08 14:24:36 +08:00
    @kop1989 目前是后台处理排队,每一段时间给用户推送排名信息,app 根据信息显示排名或者进入游戏,用户离队的话会告知服务器将该用户剔除队列
    spicecch
        18
    spicecch  
    OP
       2020-06-08 14:26:23 +08:00
    @jamme 因为游戏也是放在第三方平台的,app 只提供展示游戏,我这边要处理进入游戏前的排队逻辑,进入游戏后就不关我事了
    spicecch
        19
    spicecch  
    OP
       2020-06-08 14:28:06 +08:00
    @imherer 目前是想法是通过定时任务给队列中的用户推送排名信息
    spicecch
        20
    spicecch  
    OP
       2020-06-08 14:29:52 +08:00
    @th00000 我这边就相当于是 app 服务器吧,游戏都是放在第三方的,第三方需要我这边自己处理进入游戏前的排队逻辑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2776 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:22 · PVG 14:22 · LAX 22:22 · JFK 01:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.