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

聊一个公司的年会开发需求, 3000 人同时游戏

  •  
  •   colordog · 2017-01-13 12:19:01 +08:00 · 8681 次点击
    这是一个创建于 2862 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这样的,有个公司搞年会,要求呢,员工完个在一共时间段玩游戏,然后大屏幕显示游戏结果。

    卤煮给的方案是: 主持人说开始的时候,后台人点击游戏激活按钮,然后员工点开游戏界面,进行游戏,游戏内容就是数钱,游戏时间 20 秒,游戏完成后提交服务器,然后,大屏幕会持续刷新游戏结果(定时去扫数据库)。

    现在那个公司突然提出一个需求(在产品开发完毕的情况下): 要求大屏幕做倒计时, 20 秒倒计时,然后所有员工玩游戏也必须在倒计时这 20 秒内开始,完成,我现在整个蒙圈了,这么大的同步量,还要同步开始和结束时间,同步游戏,而且 3000 人如果用手机网络,这么多人在同一个地点的话,网络延迟的锅谁背,一下子几秒就出去了。

    哪个兄弟有解决方案,我现在的初步想法是,不给改:爱咋地咋地。

    68 条回复    2017-01-14 11:47:06 +08:00
    hinate
        1
    hinate  
       2017-01-13 12:34:41 +08:00 via iPhone
    tg gamebot...🙈🙈🙈
    hinate
        2
    hinate  
       2017-01-13 12:36:00 +08:00 via iPhone
    答非所问…没看清楚😑😑
    pelloz
        3
    pelloz  
       2017-01-13 12:44:58 +08:00
    在客户端限制 20 秒啊,服务器只管接收客户端统计好的 20 秒内的结果。当然这样也比较容易发生作弊情况~
    spice630
        4
    spice630  
       2017-01-13 12:49:21 +08:00 via iPhone
    数钱不是单机游戏吗 ? 3000 还算多?
    iyaozhen
        5
    iyaozhen  
       2017-01-13 12:49:26 +08:00 via Android
    @pelloz 这样应该可以了。程序先不放出来,提交的参数干扰下。应付一次性年会够了
    bk201
        6
    bk201  
       2017-01-13 13:02:55 +08:00
    websocket 主动推送开始结束标识,拿到结果结束。
    wyntergreg
        7
    wyntergreg  
       2017-01-13 13:06:27 +08:00
    不是有时间同步服务器吗,为什么要自己同步时间
    longear
        8
    longear  
       2017-01-13 13:16:28 +08:00
    每客户端每秒 3 ~ 4K 的数据量,要 9 ~ 12M 左右的总带宽, 只要举办地点的移动基站覆盖完善就应该没问题,

    可以让大家提前 2 分钟打开数据网络,与游戏服务器建立连接,并发送 3k 每秒的模拟包,便于基站负载均衡。

    这种高并发的简单任务适合用 node.js 来实现服务器

    这个任务还是能学到一些东西的,挺好玩的~
    colordog
        9
    colordog  
    OP
       2017-01-13 13:19:41 +08:00
    可是, 20 秒,万一基站延迟问题,这雷背起来,有点大啊
    falcon05
        10
    falcon05  
       2017-01-13 13:24:01 +08:00 via iPhone
    按三楼的方法应该可以凑和,只获取用户提交的结果就好了
    jininij
        11
    jininij  
       2017-01-13 13:29:00 +08:00 via Android
    客户端页面打开的时候,用 js 纠错一下时间,然后所有的倒计时画面,游戏,都在客户端做了。只上传游戏结果就好了。
    codespots
        12
    codespots  
       2017-01-13 14:12:14 +08:00
    不是太明白具体的要求,推荐用 Node.js+socket.io ,用 Websocket 同步游戏数据, PHP 的话推荐 Swoole ,数据库直接用 Redis ,这种就适合 node.js 或者 Swoole 这种非阻塞的模型
    gamexg
        13
    gamexg  
       2017-01-13 14:14:32 +08:00
    mlhorizon
        14
    mlhorizon  
       2017-01-13 14:22:25 +08:00
    服务端只给出开始信号,客户端收到信号后开始, 20 秒后结束,加密上传结果,服务端收齐结果进行展示。
    会场千万不要提供 WIFI ,网络问题让电信公司背锅。

    就怕领导再提出来要实时显示 top10 。
    aru
        15
    aru  
       2017-01-13 14:31:47 +08:00
    服务器端没啥问题呀
    逻辑在客户端完成,必须得到密钥游戏才能开始。
    开始前客户端定期刷新服务器,到时后拿到开始的密钥。
    客户端定期(每秒)上报游戏数据即可,时间到就游戏结束。
    php 的简单逻辑, 3000 req/s 我感觉玩儿似的。
    aru
        16
    aru  
       2017-01-13 14:33:06 +08:00
    关键问题在于用户的网络肯定会出现问题,一个大厅那么多人,估计很多人上不了网,这个锅谁来背呢?
    horizon
        17
    horizon  
       2017-01-13 14:34:56 +08:00
    不行的。。肯定很多人都上不了网。
    rrfeng
        18
    rrfeng  
       2017-01-13 14:35:04 +08:00
    3000 Client 的话 WiFI 也得几十万块的设备……
    odirus
        19
    odirus  
       2017-01-13 14:35:28 +08:00
    楼主,别考虑那么多,客户端只上传结果就行了。

    做一个网页显示地址,用于进入游戏,游戏开始前一分钟才放正式地址,让作弊的人没有足够的时间作弊(当然开始游戏前要在 PPT 上介绍一下怎么玩,不然蒙圈了,最好能检查一下各种手机是否适配,加载资源的延迟是否满足)
    murmur
        20
    murmur  
       2017-01-13 14:38:09 +08:00
    3000client 的话 你需要人民大会堂那么大的场地 还要保证每个人的网速 电信设备才是大头
    aru
        21
    aru  
       2017-01-13 14:39:01 +08:00
    @odirus
    应该提前半小时放出游戏地址,网页下载好所有的资源
    但是需要得到加密的密钥游戏才会开始
    上报的请求可以是这样子: score=xxx&t=yyy&sign=zzz ,其中签名算法可以是 md5(score+secrect+t)
    xcatliu
        22
    xcatliu  
       2017-01-13 14:40:58 +08:00
    客户端计算,提前声明:作弊者取消资格
    odirus
        23
    odirus  
       2017-01-13 14:56:04 +08:00
    @aru 恩恩,这个想法非常好,赞!
    cxl008
        24
    cxl008  
       2017-01-13 15:02:08 +08:00
    服务器倒计时结束后 接到的请求不记录到数据库当中
    lucifer9
        25
    lucifer9  
       2017-01-13 15:08:04 +08:00
    为啥还考虑作弊
    这个不是该 HR 负责的么
    isno
        26
    isno  
       2017-01-13 15:17:51 +08:00
    给楼主提醒一下:我们 4000 多人年会,当时是完全上不了网
    rrkelee
        27
    rrkelee  
       2017-01-13 15:57:18 +08:00
    需求有点像,我们是 300 人左右 。

    现在我用的 apache + php + redis ,服务器是 阿里云的 4 核 8G ,准备了 plan b ,挂了就用预备方案 。
    vus520
        28
    vus520  
       2017-01-13 16:01:42 +08:00
    你们有没有看到,国家会议中心的门口,随时都有两三个移动基站车??!!!


    因为很多密集的地方,基站根本无力支撑数千人的联网请求。


    做过五千人会议和活动的团队表示,跟你们说话真费劲。
    rrkelee
        29
    rrkelee  
       2017-01-13 16:02:54 +08:00
    apache benchmark 、 redis benchmark 都测试了,应该不会挂。

    已经提示不要用 wifi ,网络问题的锅就让电信公司背
    rrkelee
        30
    rrkelee  
       2017-01-13 16:03:27 +08:00
    @vus520 300 人如何 ?
    yunhui
        31
    yunhui  
       2017-01-13 16:10:15 +08:00
    这种业务同步需求不是交给牛逼的野狗么 https://www.wilddog.com/
    yunhui
        32
    yunhui  
       2017-01-13 16:11:37 +08:00
    开发速度快,同步的功能都不需要自己开发了
    jasontse
        33
    jasontse  
       2017-01-13 16:19:30 +08:00 via iPad
    你这活可以不用干了, 3000 人的高密度 WIFI 需要顶级的网络公司来接外包租设备,大把的钞票啊。直接用移动网络就更别想了,应急通信车不来的话估计连电话都打不通。
    goodniuniu
        34
    goodniuniu  
       2017-01-13 16:31:16 +08:00 via iPhone
    这个微信小程序能做吗
    chairuosen
        35
    chairuosen  
       2017-01-13 16:39:03 +08:00
    代码需求是小事,网络问题才是问题
    jiangzhouq
        36
    jiangzhouq  
       2017-01-13 16:46:14 +08:00
    @horizon 这哥们说了个大实话。
    lan894734188
        37
    lan894734188  
       2017-01-13 16:52:37 +08:00 via Android
    同步时间差 下发客户端带上结束时间 让客户端自行结束
    qvvo
        38
    qvvo  
       2017-01-13 17:58:33 +08:00
    @colordog 微信搞,自己弄个公众号,里面有摇一摇的游戏,谁手速快就是谁了,我们部门刚搞过,效果不错感觉,也不是自己开发的,我看页面上写的是 “ Hi 现场”提供技术支持,简单方便,不过我们是 600 多人,规模比较小
    ben2ex
        39
    ben2ex  
       2017-01-13 18:56:57 +08:00 via iPhone
    若你不联系运营商在活动时间增大该位置的基站信号,手机是上不了网的。要通讯车当天也不可能约到的,要提早联络。网络是大问题,程序很简单。
    jhdxr
        40
    jhdxr  
       2017-01-13 19:21:24 +08:00
    3000 人网络铁定崩。我们当年五六百人的年会,饭店提供的 wifi 直接崩了,然后全部走流量,刚开始还好,后来现场发支付宝红包,结果支付宝红包页面都刷不出。。。
    colordog
        41
    colordog  
    OP
       2017-01-13 21:56:32 +08:00
    @aru 帅哥, 1000 快得预算,要求实时展示游戏结果,给这么复杂的解决方案,而且员工的网络,是 wifi ,还是联通、电信、移动, 2 , 3 , 4G ,我根本没法控制
    colordog
        42
    colordog  
    OP
       2017-01-13 21:57:28 +08:00
    @horizon 对的,用户网络复杂,鬼知道弄这么短时间触发这么大量,服务器没阻塞,用户网络阻塞算谁的啊
    colordog
        43
    colordog  
    OP
       2017-01-13 21:58:19 +08:00
    @rrfeng 网络情况未知,有 wifi ,有联通,有移动,有电信,而且还有 2 , 3 , 4G ,特别复杂,没法控制
    colordog
        44
    colordog  
    OP
       2017-01-13 21:59:35 +08:00
    @odirus 谢谢,我的意思主要在于,同一秒集中上传数据,如果服务器不考虑阻塞问题,用户网络环境复杂造成阻塞,这个雷让服务器背,有点大,客户并不懂
    colordog
        45
    colordog  
    OP
       2017-01-13 22:01:04 +08:00
    @aru 额,你没明白我的意思,这里不考虑作弊的问题,只说服务有没有阻塞,服务器没阻塞,用户网络环境负责,如果 3000 人同时触发,万一用户网络阻塞,让服务器背,锅有点大
    colordog
        46
    colordog  
    OP
       2017-01-13 22:03:32 +08:00
    @isno 应该能上网,他们头年年会的时候,弄了 3000 人摇红包,但是微信没开支付功能,弄得自己分发金额,然后去财务领,结果网络是没问题的,头年弄了个体育馆,太大了,空一半
    colordog
        47
    colordog  
    OP
       2017-01-13 22:04:39 +08:00
    @vus520 恩,移动车不知道有没有,场地是专门的会议中心,貌似某个地方台的什么春节晚会,录播的部分,就在这弄得,也是小几千人吧
    colordog
        48
    colordog  
    OP
       2017-01-13 22:09:53 +08:00
    感谢大家的回复,我补充一下,这个游戏预算呢,就给 1000 快,微信公众号,他们是要求 3000 人在 20 秒进行摇一摇的动作,要把这所有人同时 20 秒内的动作,同时提交给服务器,而且大屏幕同步, ok , websocket ,的确能解决,不过我不想给改了,预算太低了,而且要求同步都是后来才加的,如果 20 秒。

    还有,不想改 3000 人同时触发也跟员工手机网络有关系,我不想因为员工手机网络问题造成雷让我背,太大了,背不起来。

    补充会场网络情况应该凑合,但是肯定会复杂, WIFI ,移动,电信,联通( 2G , 3G , 4G )肯定都有,而且啥手机都会有,高级的 iphone ,低级的, 500 的安卓,所以你们的解决方案太高大上,哈哈。
    hvsy
        49
    hvsy  
       2017-01-13 22:11:24 +08:00 via iPhone
    为什么不考虑直接搬服务器到会场现场,用局域网,多个 wifi 来搞呢, 20 秒的时间一次性不需要考虑作弊。加密好就够了
    colordog
        50
    colordog  
    OP
       2017-01-13 22:12:31 +08:00
    @jhdxr 北京专业的会场,部分地方电视台有些节目也在这里录制,所以网络承载应该有解决,但是不能保证所有员工都用会场的网络
    colordog
        51
    colordog  
    OP
       2017-01-13 22:14:04 +08:00
    @hvsy 没预算,哈哈,这玩意就给 1000 快预算,服务器用阿里云的,用完就删除,哪里来的那么牛的服务器还能搬现场,这硬件都不好租到吧
    jiangzhuo
        52
    jiangzhuo  
       2017-01-13 22:15:50 +08:00
    领导就没有考虑到使用功能机的员工吗。这方案默认前提所有员工都发一台智能设备或者电脑?
    colordog
        53
    colordog  
    OP
       2017-01-13 22:21:07 +08:00
    @jiangzhuo 是管不过来吧,他们年会找了我朋友公司给接的,预算 100 多万,然后一大堆其他的,到这个微信游戏这就没预算了,基本都是想了各种需求后,然后就是++++++++,各种加需求,但是预算卡死了
    hvsy
        54
    hvsy  
       2017-01-13 22:27:19 +08:00 via iPhone
    @colordog 就这预算那还是刷锅给 4g 吧,网速才是关键。
    colordog
        55
    colordog  
    OP
       2017-01-13 22:30:32 +08:00
    @hvsy 哈哈,主要是别的项目吧预算用了,到这来就剩下这么点了,哈哈
    jiangzhuo
        56
    jiangzhuo  
       2017-01-13 22:35:34 +08:00
    @colordog 这样把网络问题甩锅给微信就好了,让 3000 人加同一个微信号好友,游戏开始后让用户 1 2 3 4 5 6 7 8 地按需给这个微信号发信息。然后弄个大屏幕实时把 3000 人的信息显示出来就好了。怎么样
    colordog
        57
    colordog  
    OP
       2017-01-13 22:38:35 +08:00
    @jiangzhuo 哈哈,已经做完了,是用户点开始,计时 20 秒,然后计时结束,上传成绩,只是做完了之后客户又想增加大屏同步时间,想让他们控制游戏开始,不让用户触发,大屏同步,被我给否了,忽悠他们别改了看,就这么点预算,时间紧迫,还来回改。
    mingyun
        58
    mingyun  
       2017-01-13 23:44:26 +08:00
    @jiangzhuo 哈哈
    eyp82
        59
    eyp82  
       2017-01-14 00:04:07 +08:00
    @colordog 预算 1000 块? 你的意思是你做完了这个程序然后拿 1000 块?
    flynaj
        60
    flynaj  
       2017-01-14 00:54:28 +08:00
    楼上的程序员,这个软件根本不用连网。展示一下动画效果就行
    lueo
        61
    lueo  
       2017-01-14 01:20:33 +08:00
    @flynaj 正解
    latyas
        62
    latyas  
       2017-01-14 01:31:42 +08:00
    @flynaj 6666666666666666666666666
    AbrahamGreyson
        63
    AbrahamGreyson  
       2017-01-14 01:38:39 +08:00 via iPhone
    纯 nginx 搞定。
    bk201
        64
    bk201  
       2017-01-14 01:39:20 +08:00 via iPhone
    @flynaj 这个方法最实际.屏幕直接随机给出结果,客户端只给游戏不给结果.
    good758
        65
    good758  
       2017-01-14 09:48:10 +08:00
    我们公司年会大概 1000 人年会,那移动 4G 就跑不起来,难道你们年会还要请求移动基站支援?
    realpg
        66
    realpg  
       2017-01-14 10:31:12 +08:00
    3000 人的会场……
    除非移动给你派个应急通信保障车,额,室内进不去,基本约等于所有人都掉线状态……
    simple11
        67
    simple11  
       2017-01-14 10:41:00 +08:00
    1. 如果不做特殊处理,怀疑网络会出问题,
    2. 游戏过程让客户端来限制(只能玩一次、某个时间点才能开始的一大堆问题都扔给客户端),服务器只管接受结果 ...
    ebony0319
        68
    ebony0319  
       2017-01-14 11:47:06 +08:00
    同学 你上过 12306 买过票么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1294 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 18:00 · PVG 02:00 · LAX 10:00 · JFK 13:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.