这样的,有个公司搞年会,要求呢,员工完个在一共时间段玩游戏,然后大屏幕显示游戏结果。
卤煮给的方案是: 主持人说开始的时候,后台人点击游戏激活按钮,然后员工点开游戏界面,进行游戏,游戏内容就是数钱,游戏时间 20 秒,游戏完成后提交服务器,然后,大屏幕会持续刷新游戏结果(定时去扫数据库)。
现在那个公司突然提出一个需求(在产品开发完毕的情况下): 要求大屏幕做倒计时, 20 秒倒计时,然后所有员工玩游戏也必须在倒计时这 20 秒内开始,完成,我现在整个蒙圈了,这么大的同步量,还要同步开始和结束时间,同步游戏,而且 3000 人如果用手机网络,这么多人在同一个地点的话,网络延迟的锅谁背,一下子几秒就出去了。
哪个兄弟有解决方案,我现在的初步想法是,不给改:爱咋地咋地。
1
hinate 2017-01-13 12:34:41 +08:00 via iPhone
tg gamebot...🙈🙈🙈
|
2
hinate 2017-01-13 12:36:00 +08:00 via iPhone
答非所问…没看清楚😑😑
|
3
pelloz 2017-01-13 12:44:58 +08:00
在客户端限制 20 秒啊,服务器只管接收客户端统计好的 20 秒内的结果。当然这样也比较容易发生作弊情况~
|
4
spice630 2017-01-13 12:49:21 +08:00 via iPhone
数钱不是单机游戏吗 ? 3000 还算多?
|
6
bk201 2017-01-13 13:02:55 +08:00
websocket 主动推送开始结束标识,拿到结果结束。
|
7
wyntergreg 2017-01-13 13:06:27 +08:00
不是有时间同步服务器吗,为什么要自己同步时间
|
8
longear 2017-01-13 13:16:28 +08:00
每客户端每秒 3 ~ 4K 的数据量,要 9 ~ 12M 左右的总带宽, 只要举办地点的移动基站覆盖完善就应该没问题,
可以让大家提前 2 分钟打开数据网络,与游戏服务器建立连接,并发送 3k 每秒的模拟包,便于基站负载均衡。 这种高并发的简单任务适合用 node.js 来实现服务器 这个任务还是能学到一些东西的,挺好玩的~ |
9
colordog OP 可是, 20 秒,万一基站延迟问题,这雷背起来,有点大啊
|
10
falcon05 2017-01-13 13:24:01 +08:00 via iPhone
按三楼的方法应该可以凑和,只获取用户提交的结果就好了
|
11
jininij 2017-01-13 13:29:00 +08:00 via Android
客户端页面打开的时候,用 js 纠错一下时间,然后所有的倒计时画面,游戏,都在客户端做了。只上传游戏结果就好了。
|
12
codespots 2017-01-13 14:12:14 +08:00
不是太明白具体的要求,推荐用 Node.js+socket.io ,用 Websocket 同步游戏数据, PHP 的话推荐 Swoole ,数据库直接用 Redis ,这种就适合 node.js 或者 Swoole 这种非阻塞的模型
|
14
mlhorizon 2017-01-13 14:22:25 +08:00
服务端只给出开始信号,客户端收到信号后开始, 20 秒后结束,加密上传结果,服务端收齐结果进行展示。
会场千万不要提供 WIFI ,网络问题让电信公司背锅。 就怕领导再提出来要实时显示 top10 。 |
15
aru 2017-01-13 14:31:47 +08:00
服务器端没啥问题呀
逻辑在客户端完成,必须得到密钥游戏才能开始。 开始前客户端定期刷新服务器,到时后拿到开始的密钥。 客户端定期(每秒)上报游戏数据即可,时间到就游戏结束。 php 的简单逻辑, 3000 req/s 我感觉玩儿似的。 |
16
aru 2017-01-13 14:33:06 +08:00
关键问题在于用户的网络肯定会出现问题,一个大厅那么多人,估计很多人上不了网,这个锅谁来背呢?
|
17
horizon 2017-01-13 14:34:56 +08:00
不行的。。肯定很多人都上不了网。
|
18
rrfeng 2017-01-13 14:35:04 +08:00
3000 Client 的话 WiFI 也得几十万块的设备……
|
19
odirus 2017-01-13 14:35:28 +08:00
楼主,别考虑那么多,客户端只上传结果就行了。
做一个网页显示地址,用于进入游戏,游戏开始前一分钟才放正式地址,让作弊的人没有足够的时间作弊(当然开始游戏前要在 PPT 上介绍一下怎么玩,不然蒙圈了,最好能检查一下各种手机是否适配,加载资源的延迟是否满足) |
20
murmur 2017-01-13 14:38:09 +08:00
3000client 的话 你需要人民大会堂那么大的场地 还要保证每个人的网速 电信设备才是大头
|
21
aru 2017-01-13 14:39:01 +08:00
@odirus
应该提前半小时放出游戏地址,网页下载好所有的资源 但是需要得到加密的密钥游戏才会开始 上报的请求可以是这样子: score=xxx&t=yyy&sign=zzz ,其中签名算法可以是 md5(score+secrect+t) |
22
xcatliu 2017-01-13 14:40:58 +08:00
客户端计算,提前声明:作弊者取消资格
|
24
cxl008 2017-01-13 15:02:08 +08:00
服务器倒计时结束后 接到的请求不记录到数据库当中
|
25
lucifer9 2017-01-13 15:08:04 +08:00
为啥还考虑作弊
这个不是该 HR 负责的么 |
26
isno 2017-01-13 15:17:51 +08:00
给楼主提醒一下:我们 4000 多人年会,当时是完全上不了网
|
27
rrkelee 2017-01-13 15:57:18 +08:00
需求有点像,我们是 300 人左右 。
现在我用的 apache + php + redis ,服务器是 阿里云的 4 核 8G ,准备了 plan b ,挂了就用预备方案 。 |
28
vus520 2017-01-13 16:01:42 +08:00
你们有没有看到,国家会议中心的门口,随时都有两三个移动基站车??!!!
因为很多密集的地方,基站根本无力支撑数千人的联网请求。 做过五千人会议和活动的团队表示,跟你们说话真费劲。 |
29
rrkelee 2017-01-13 16:02:54 +08:00
apache benchmark 、 redis benchmark 都测试了,应该不会挂。
已经提示不要用 wifi ,网络问题的锅就让电信公司背 |
31
yunhui 2017-01-13 16:10:15 +08:00
这种业务同步需求不是交给牛逼的野狗么 https://www.wilddog.com/
|
32
yunhui 2017-01-13 16:11:37 +08:00
开发速度快,同步的功能都不需要自己开发了
|
33
jasontse 2017-01-13 16:19:30 +08:00 via iPad
你这活可以不用干了, 3000 人的高密度 WIFI 需要顶级的网络公司来接外包租设备,大把的钞票啊。直接用移动网络就更别想了,应急通信车不来的话估计连电话都打不通。
|
34
goodniuniu 2017-01-13 16:31:16 +08:00 via iPhone
这个微信小程序能做吗
|
35
chairuosen 2017-01-13 16:39:03 +08:00
代码需求是小事,网络问题才是问题
|
36
jiangzhouq 2017-01-13 16:46:14 +08:00
@horizon 这哥们说了个大实话。
|
37
lan894734188 2017-01-13 16:52:37 +08:00 via Android
同步时间差 下发客户端带上结束时间 让客户端自行结束
|
38
qvvo 2017-01-13 17:58:33 +08:00
@colordog 微信搞,自己弄个公众号,里面有摇一摇的游戏,谁手速快就是谁了,我们部门刚搞过,效果不错感觉,也不是自己开发的,我看页面上写的是 “ Hi 现场”提供技术支持,简单方便,不过我们是 600 多人,规模比较小
|
39
ben2ex 2017-01-13 18:56:57 +08:00 via iPhone
若你不联系运营商在活动时间增大该位置的基站信号,手机是上不了网的。要通讯车当天也不可能约到的,要提早联络。网络是大问题,程序很简单。
|
40
jhdxr 2017-01-13 19:21:24 +08:00
3000 人网络铁定崩。我们当年五六百人的年会,饭店提供的 wifi 直接崩了,然后全部走流量,刚开始还好,后来现场发支付宝红包,结果支付宝红包页面都刷不出。。。
|
41
colordog OP @aru 帅哥, 1000 快得预算,要求实时展示游戏结果,给这么复杂的解决方案,而且员工的网络,是 wifi ,还是联通、电信、移动, 2 , 3 , 4G ,我根本没法控制
|
43
colordog OP @rrfeng 网络情况未知,有 wifi ,有联通,有移动,有电信,而且还有 2 , 3 , 4G ,特别复杂,没法控制
|
44
colordog OP @odirus 谢谢,我的意思主要在于,同一秒集中上传数据,如果服务器不考虑阻塞问题,用户网络环境复杂造成阻塞,这个雷让服务器背,有点大,客户并不懂
|
45
colordog OP @aru 额,你没明白我的意思,这里不考虑作弊的问题,只说服务有没有阻塞,服务器没阻塞,用户网络环境负责,如果 3000 人同时触发,万一用户网络阻塞,让服务器背,锅有点大
|
46
colordog OP @isno 应该能上网,他们头年年会的时候,弄了 3000 人摇红包,但是微信没开支付功能,弄得自己分发金额,然后去财务领,结果网络是没问题的,头年弄了个体育馆,太大了,空一半
|
47
colordog OP @vus520 恩,移动车不知道有没有,场地是专门的会议中心,貌似某个地方台的什么春节晚会,录播的部分,就在这弄得,也是小几千人吧
|
48
colordog OP 感谢大家的回复,我补充一下,这个游戏预算呢,就给 1000 快,微信公众号,他们是要求 3000 人在 20 秒进行摇一摇的动作,要把这所有人同时 20 秒内的动作,同时提交给服务器,而且大屏幕同步, ok , websocket ,的确能解决,不过我不想给改了,预算太低了,而且要求同步都是后来才加的,如果 20 秒。
还有,不想改 3000 人同时触发也跟员工手机网络有关系,我不想因为员工手机网络问题造成雷让我背,太大了,背不起来。 补充会场网络情况应该凑合,但是肯定会复杂, WIFI ,移动,电信,联通( 2G , 3G , 4G )肯定都有,而且啥手机都会有,高级的 iphone ,低级的, 500 的安卓,所以你们的解决方案太高大上,哈哈。 |
49
hvsy 2017-01-13 22:11:24 +08:00 via iPhone
为什么不考虑直接搬服务器到会场现场,用局域网,多个 wifi 来搞呢, 20 秒的时间一次性不需要考虑作弊。加密好就够了
|
50
colordog OP @jhdxr 北京专业的会场,部分地方电视台有些节目也在这里录制,所以网络承载应该有解决,但是不能保证所有员工都用会场的网络
|
51
colordog OP @hvsy 没预算,哈哈,这玩意就给 1000 快预算,服务器用阿里云的,用完就删除,哪里来的那么牛的服务器还能搬现场,这硬件都不好租到吧
|
52
jiangzhuo 2017-01-13 22:15:50 +08:00
领导就没有考虑到使用功能机的员工吗。这方案默认前提所有员工都发一台智能设备或者电脑?
|
53
colordog OP @jiangzhuo 是管不过来吧,他们年会找了我朋友公司给接的,预算 100 多万,然后一大堆其他的,到这个微信游戏这就没预算了,基本都是想了各种需求后,然后就是++++++++,各种加需求,但是预算卡死了
|
56
jiangzhuo 2017-01-13 22:35:34 +08:00
@colordog 这样把网络问题甩锅给微信就好了,让 3000 人加同一个微信号好友,游戏开始后让用户 1 2 3 4 5 6 7 8 地按需给这个微信号发信息。然后弄个大屏幕实时把 3000 人的信息显示出来就好了。怎么样
|
57
colordog OP @jiangzhuo 哈哈,已经做完了,是用户点开始,计时 20 秒,然后计时结束,上传成绩,只是做完了之后客户又想增加大屏同步时间,想让他们控制游戏开始,不让用户触发,大屏同步,被我给否了,忽悠他们别改了看,就这么点预算,时间紧迫,还来回改。
|
60
flynaj 2017-01-14 00:54:28 +08:00
楼上的程序员,这个软件根本不用连网。展示一下动画效果就行
|
63
AbrahamGreyson 2017-01-14 01:38:39 +08:00 via iPhone
纯 nginx 搞定。
|
65
good758 2017-01-14 09:48:10 +08:00
我们公司年会大概 1000 人年会,那移动 4G 就跑不起来,难道你们年会还要请求移动基站支援?
|
66
realpg 2017-01-14 10:31:12 +08:00
3000 人的会场……
除非移动给你派个应急通信保障车,额,室内进不去,基本约等于所有人都掉线状态…… |
67
simple11 2017-01-14 10:41:00 +08:00
1. 如果不做特殊处理,怀疑网络会出问题,
2. 游戏过程让客户端来限制(只能玩一次、某个时间点才能开始的一大堆问题都扔给客户端),服务器只管接受结果 ... |
68
ebony0319 2017-01-14 11:47:06 +08:00
同学 你上过 12306 买过票么?
|