聊一个公司的年会开发需求, 3000 人同时游戏 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
colordog
V2EX    PHP

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

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

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

    卤煮给的方案是: 主持人说开始的时候,后台人点击游戏激活按钮,然后员工点开游戏界面,进行游戏,游戏内容就是数钱,游戏时间 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 秒,万一基站延迟问题,这雷背起来,有点大啊
    GG668v26Fd55CP5W
        10
    GG668v26Fd55CP5W  
       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  
    PRO
       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     Solana     952 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 19:28 PVG 03:28 LAX 12:28 JFK 15:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86