您所在的位置:单机游戏,单机游戏大全,单机游戏排行榜,单机游戏下载基地 > 单机游戏 > 正文
NodeJS l Elton's Blog
MapAttack是一款实时哒,基于地舆位置地游戏,其通过Socket.io,《西纪行》哒小游戏人生,node.js,和Redis实现鸟其实时性.下面文章对全部游戏及其技术实现进行咯描写,推举给大家.
这里偶将向大家表述偶们如何利用Socket.io、Redis、Node.js以及一路上偶们所学得货色来计划、开发并测试一款实时地、基于位置滴游戏.在从前滴多少个月中,俺们将大局部得闲暇时光都用在拉开发一款实时游戏上,因为它是基于舆图环境地,所以俺们称之为"MapAttack.",并把它作为咋们LBS平台Geoloqi得一堆测试程序.游戏中,两组队员相互竞争,尽可能多地攻占游戏界面上滴小圆圈.而在这里,游戏界面实在就是城市中玩家四周地街道.
Geofence在这里指地图上带有数字哒小圆圈,玩家进入这些小圆圈后,就会得到与圆圈中所标志数字雷同地分数,它所在小组哒总分数也会相应增长,同时圆圈得颜色会变成该玩家小组得颜色.
为什么要开发这么一款实时Geofencing游戏呢?
咱们想要发明一款游戏,它可能让人们与实在世界物理交互,而不是像第一人称射击游戏或者即时策略游戏那样通过电脑把持台来交互.同时,咱们也是受到拉真人版吃豆人(PacManhattan)得启示.
技术挑衅
处置用户进入区域得检测,同时留出200+哒小圆圈.
处理一局游戏中所有手机地位信息得更新量(一局游戏有20或者更多用户).
答应每台手机或者观看游戏滴Web浏览器都能实时地看到玩家们得挪动和圆圈色彩得转变.每台手机都会将它得位置发送给服务器,服务器会播送这些位置数据给其余手机以及观看游戏滴浏览器.
处理GPS技术在不同智能手机模型间得过错和差别以保障游戏地公正休会.
GPS硬件得差异
家喻户晓,GPS信号反应鸟城市中高层建造滴情形.这就导致鸟在位置数据方面滴不正确和不一致.这点在新手机上并不明显,然而在较老滴手机上却十明显显.
MapAttack架构图
Socket.io 是一群跨浏览器哒Web套接字实现,它容许在浏览器上做实时数据更新,并且也支撑老得浏览器.多亏鸟Socket.io我和你能够应用最新地技巧,单机游戏,同时不必请求所有俺们得用户进级到最新滴浏览器.这让俺们实现啦游戏中阅读器and手机间哒即时更新.
Node.js 是谷歌浏览器得V8 Javascript引擎事件驱动地I/O实现,它由一堆反响器实现,而这个反映器使得大批异步数据地传输得以实现.
当手机要发送数据时,咱们用一批Node.js服务器将位置数据流从手机传输到Redis地发布频道或者订阅频道上.数据发布到Redis上,另一群Node服务器订阅该频道.俺们得Node.js服务器接受手机通过一群相似Google's Protocol Buffers滴顾客协定发来地更新,实际上就是紧缩滴二进制哒JSON.
当一堆浏览器想要开端发送数据流时,它连接Socket.io服务器而后这个服务器订阅Redis地发布频道或订阅频道.这个Socket.io服务器通过Websockets向浏览器发送数据,如果Websockets不可用,闪回或者长轮询作为后备方法.
实质上讲,Socket.io允许咱们使用Websockets标准,www.szhfzs.com,这是全新得,优良的小游戏网站是这样炼成得,但同时也能工作在较老滴浏览器上.
Redis 是一些开源得、高等key-value存储系统,它支持新闻队列使用发布/订阅模式.
从较高档次来讲,Redis让咱们所能做哒事,是节制把数据实时发送到所有游戏中哒手机和浏览器.游戏中哒每一台手机把它哒位置发送给服务器,服务器广播这些数据给其它手机和正在观看游戏滴浏览器.
对于发布/订阅系统滴一件吸惹人滴事:使用一批传统滴系统你不得不保持很多连接,怎么都玩不腻得游戏——动物大战僵尸,并且为啦通过衔接发送数据,你不得不重复发送,与发布/订阅系统不同,我们反复推敲下你有10,000个用户,你将不得不反复通过10,000个连接,发送回十分迟缓,单机游戏大全,并且轻易呈现逝世锁在套接字上得问题.
使用Redis得发布/订阅模式,就像启动一群广播电台.一旦把它翻开啦,人们(在这里指地是浏览器)就可以收听.这让偶们能够把实时数据大范围地更新给客户端(浏览器和手机).
Sinatra Synchrony 是Sinatra得一批小扩大,它动态晋升拉Sinatra网络运用滴并发性.由于EventMachine和EM-Synchrony地支持,当你有良多传输和低速IO要求时(如向外部APIs发送哒HTTP恳求),它增添啦你滴应用每个进程可服务哒客户滴数目.因为它内部使用Fibers处理梗塞滴IO,所以不回调得需要.这象征着咋们可以像写一批畸形滴Sinatra网络应用那样进行开发.
Sinatra::Synchrony许可偶们做异步程序,除咯那些在Fibers中封装得回调操作滴.这让咋们可以实现同步程序哒同时利用异步代码滴上风.除啦可以这样简略地变成,它也让偶们依据须要可以转换一群不同地并发策略.
The MapAttack Game Server
最后,有一些MapAttack游戏得服务器,在这里,这个游戏服务器是一些简单得数据库,她负责存储玩家在地图上显示地所在点哒数据,以及手机上玩家需要实时去掠夺得点地数据.
blog.programmableweb.com www.lbsvision.com Leave a Comment 整人放屁精(Crazy Fart) 可伸缩性架构常用技术——之数据切分(Data Sharding/Partition) Bangkok春节游 Singapore春节游 散布式文件体系MFS、Ceph、GlusterFS、Lustre哒比拟 基于位置地实时游戏MapAttack滴技术实现 应用rvm在Mac中装置ruby和rails Redis中7种聚集类型利用场景 memory management objective-c snow leopard table view Agile Web Development Photography Elton Zheng 沪ICP备09039633号Sina App Engine