当前位置:首页>资讯 >渠道商圈 > 创业故事>Wordament:**支持Xbox Live成就的iPhone游戏

Wordament:**支持Xbox Live成就的iPhone游戏

2012-12-25 责任编辑:未填 浏览数:未显示 中贸商网-贸易商务资源网

核心提示:  据MacRumors报道,微软周末发布了一款名为Wordament的iPhone游戏。Wordament是一款Windows Phone游戏,在该平台上很受欢迎,

  据MacRumors报道,微软周末发布了一款名为Wordament的iPhone游戏。Wordament是一款Windows Phone游戏,在该平台上很受欢迎,现在微软正式发布了iOS版本。Wordament**初只是Windows Live两名员工的一个业余项目,随后由微软收购并在微软游戏工作室发布。

  当用户登录其免费的Microsoft账户,就可以从10个成就中赢取50个Gamerscore,并且用户还可以访问所有的Xbox好友和Wordament敌友。如果用户曾在Windows Phone或Window 8上玩过此款游戏,你切换到iOS版本后,你所有的游戏积分和好友将不会丢失,会自动跟着你的账户。

  Wordament是一款简单的文字游戏,你需要在两分钟内尽可能猜出更多的单词,并且可以与朋友实时游戏。游戏界面是一个4×4的网格,一共显示16个字母,你可以通过在相邻字母间移动手指来猜单词。

  

 

  微软在iOS游戏领域其实早就有所作为,他们曾发布过一款允许用户管理自己Xbox Live账户的应用程序,还发布过包括Kinectimals在内的多个iPhone游戏。Wordament目前可以在App Store免费下载使用。(韩美玲/编译 朱慧涛/审校)

  本文为CSDN编译整理,未经允许不得转载。如需转载请联系market@csdn.net。

  (责任编辑:leonlee07)

  打印 分享 评论 分享到:

  分享 顶一下 (0)

  Storm

  对比Hadoop的批处理,Storm是个实时的、分布式以及具备高容错的计算系统。同Hadoop一样Storm也可以处理大批量的数据,然而Storm在保证高可靠性的前提下还可以让处理进行的更加实时;也就是说,所有的信息都会被处理。Storm同样还具备容错和分布计算这些特性,这就让Storm可以扩展到不同的机器上进行大批量的数据处理。他同样还有以下的这些特性:

  易于扩展。对于扩展,你只需要添加机器和改变对应的topology(拓扑)设置。Storm使用Hadoop Zookeeper进行集群协调,这样可以充分的保证大型集群的良好运行。

  每条信息的处理都可以得到保证。

  Storm集群管理简易。

  Storm的容错机能:一旦topology递交,Storm会一直运行它直到topology被废除或者被关闭。而在执行中出现错误时,也会由Storm重新分配任务。

  尽管通常使用Java,Storm中的topology可以用任何语言设计。

  当然为了更好的理解文章,你首先需要安装和设置Storm。需要通过以下几个简单的步骤:

  从Storm**下载Storm安装文件

  将bin/directory解压到你的PATH上,并保证bin/storm脚本是可执行的。

  Storm组件

  Storm集群主要由一个主节点和一群工作节点(worker node)组成,通过 Zookeeper进行协调。

  主节点:

  主节点通常运行一个后台程序 —— Nimbus,用于响应分布在集群中的节点,分配任务和监测故障。这个很类似于Hadoop中的Job Tracker。

  工作节点:

  工作节点同样会运行一个后台程序 —— Supervisor,用于收听工作指派并基于要求运行工作进程。每个工作节点都是topology中一个子集的实现。而Nimbus和Supervisor之间的协调则通过Zookeeper系统或者集群。

  Zookeeper

  Zookeeper是完成Supervisor和Nimbus之间协调的服务。而应用程序实现实时的逻辑则被封装进Storm中的“topology”。topology则是一组由Spouts(数据源)和Bolts(数据操作)通过Stream Groupings进行连接的图。下面对出现的术语进行更深刻的解析。

  Spout:

  简而言之,Spout从来源处读取数据并放入topology。Spout分成可靠和不可靠两种;当Storm接收失败时,可靠的Spout会对tuple(元组,数据项组成的列表)进行重发;而不可靠的Spout不会考虑接收成功与否只发射一次。而Spout中**主要的方法就是nextTuple(),该方法会发射一个新的tuple到topology,如果没有新tuple发射则会简单的返回。

  Bolt:

  Topology中所有的处理都由Bolt完成。Bolt可以完成任何事,比如:连接的过滤、聚合、访问文件/数据库、等等。Bolt从Spout中接收数据并进行处理,如果遇到复杂流的处理也可能将tuple发送给另一个Bolt进行处理。而Bolt中**的方法是execute(),以新的tuple作为参数接收。不管是Spout还是Bolt,如果将tuple发射成多个流,这些流都可以通过declareStream()来声明。

  Stream Groupings:

  Stream Grouping定义了一个流在Bolt任务间该如何被切分。这里有Storm提供的6个Stream Grouping类型:

  1. 随机分组(Shuffle grouping):随机分发tuple到Bolt的任务,保证每个任务获得相等数量的tuple。

  2. 字段分组(Fields grouping):根据指定字段分割数据流,并分组。例如,根据“user-id”字段,相同“user-id”的元组总是分发到同一个任务,不同“user-id”的元组可能分发到不同的任务。

  3. 全部分组(All grouping):tuple被复制到bolt的所有任务。这种类型需要谨慎使用。

  4. 全局分组(Global grouping):全部流都分配到bolt的同一个任务。明确地说,是分配给ID**小的那个task。

  5. 无分组(None grouping):你不需要关心流是如何分组。目前,无分组等效于随机分组。但**终,Storm将把无分组的Bolts放到Bolts或Spouts订阅它们的同一线程去执行(如果可能)。

  6. 直接分组(Direct grouping):这是一个特别的分组类型。元组生产者决定tuple由哪个元组处理者任务接收。

  当然还可以实现CustomStreamGroupimg接口来定制自己需要的分组。

  项目实施

  当下情况我们需要给Spout和Bolt设计一种能够处理大量数据(日志文件)的topology,当一个特定数据值超过预设的临界值时促发警报。使用Storm的topology,逐行读入日志文件并且监视输入数据。在Storm组件方面,Spout负责读入输入数据。它不仅从现有的文件中读入数据,同时还监视着新文件。文件一旦被修改Spout会读入新的版本并且覆盖之前的tuple(可以被Bolt读入的格式),将tuple发射给Bolt进行临界分析,这样就可以发现所有可能超临界的记录。

  下一节将对用例进行详细介绍。

  临界分析

  这一节,将主要聚焦于临界值的两种分析类型:瞬间临界(instant thershold)和时间序列临界(time series threshold)。

  瞬间临界值监测:一个字段的值在那个瞬间超过了预设的临界值,如果条件符合的话则触发一个trigger。举个例子当车辆超越80公里每小时,则触发trigger。

  时间序列临界监测:字段的值在一个给定的时间段内超过了预设的临界值,如果条件符合则触发一个触发器。比如:在5分钟类,时速超过80KM两次及以上的车辆。

  Listing One显示了我们将使用的一个类型日志,其中包含的车辆数据信息有:车牌号、车辆行驶的速度以及数据获取的位置。

  AB 12360North city

  BC 12370South city

  CD 23440South city

  DE 12340East city

  EF 12390South city

  GH 12350West city

  这里将创建一个对应的XML文件,这将包含引入数据的模式。这个XML将用于日志文件的解析。XML的设计模式和对应的说明请见下表。

  

 

  XML文件和日志文件都存放在Spout可以随时监测的目录下,用以关注文件的实时更新。而这个用例中的topology请见下图。

  

 

  Figure 1:Storm中建立的topology,用以实现数据实时处理

  如图所示:FilelistenerSpout接收输入日志并进行逐行的读入,接着将数据发射给ThresoldCalculatorBolt进行更深一步的临界值处理。一旦处理完成,被计算行的数据将发送给DBWriterBolt,然后由DBWriterBolt存入给数据库。下面将对这个过程的实现进行详细的解析。

  Spout的实现

  Spout以日志文件和XML描述文件作为接收对象。XML文件包含了与日志一致的设计模式。不妨设想一下一个示例日志文件,包含了车辆的车牌号、行驶速度、以及数据的捕获位置。(看下图)

  

 

  Figure2:数据从日志文件到Spout的流程图

  Listing Two显示了tuple对应的XML,其中指定了字段、将日志文件切割成字段的定界符以及字段的类型。XML文件以及数据都被保存到Spout指定的路径。

  Listing Two:用以描述日志文件的XML文件。

  vehicle_numberstringspeedintlocationstring,

  通过构造函数及它的参数Directory、PathSpout和TupleInfo对象创建Spout对象。TupleInfo储存了日志文件的字段、定界符、字段的类型这些很必要的信息。这个对象通过XSTream序列化XML时建立。

  Spout的实现步骤:

  对文件的改变进行分开的**,并监视目录下有无新日志文件添加。

  在数据得到了字段的说明后,将其转换成tuple。

  声明Spout和Bolt之间的分组,并决定tuple发送给Bolt的途径。

  Spout的具体编码在Listing Three中显示。

  Listing Three:Spout中open、nextTuple和delcareOutputFields方法的逻辑。

  publicvoidopen(Mapconf,TopologyContextcontext,SpoutOutputCollectorcollector) { _collector=collector; try { fileReader=newBufferedReader(newFileReader(newFile(file))); } catch(FileNotFoundExceptione) { System.exit(1); } } publicvoidnextTuple() { protectedvoidListenFile(Filefile) { Utils.sleep(2000); RandomAccessFileaccess=null; Stringline=null; try { while((line=access.readLine())!=null) { if(line!=null) { String[]fields=null; if(tupleInfo.getDelimiter().equals("|"))fields=line.split("\\"+tupleInfo.getDelimiter()); else fields=line.split(tupleInfo.getDelimiter()); if(tupleInfo.getFieldList().size()==fields.length)_collector.emit(newValues(fields)); } } } catch(IOExceptionex){} } } publicvoiddeclareOutputFields(OutputFieldsDeclarerdeclarer) { String[]fieldsArr=newString[tupleInfo.getFieldList().size()]; for(inti=0;i

  declareOutputFileds()决定了tuple发射的格式,这样的话Bolt就可以用类似的方法将tuple译码。Spout持续对日志文件的数据的变更进行**,一旦有添加Spout就会进行读入并且发送给Bolt进行处理。

  Bolt的实现

  Spout的输出结果将给予Bolt进行更深一步的处理。经过对用例的思考,我们的topology中需要如Figure 3中的两个Bolt。

  Figure 3:Spout到Bolt的数据流程。

  ThresholdCalculatorBolt

  Spout将tuple发出,由ThresholdCalculatorBolt接收并进行临界值处理。在这里,它将接收好几项输入进行检查;分别是:

  临界值检查

  临界值栏数检查(拆分成字段的数目)

  临界值数据类型(拆分后字段的类型)

  临界值出现的频数

  临界值时间段检查

  Listing Four中的类,定义用来保存这些值。

  Listing Four:ThresholdInfo类

  publicclassThresholdInfoimplementsSerializable { privateStringaction; privateStringrule; privateObjectthresholdValue; privateintthresholdColNumber; privateIntegertimeWindow; privateintfrequencyOfOccurence; }

  基于字段中提供的值,临界值检查将被Listing Five中的execute()方法执行。代码大部分的功能是解析和接收值的检测。

  Listing Five:临界值检测代码段

  publicvoidexecute(Tupletuple,BasicOutputCollectorcollector) { if(tuple!=null) { List

分享到:
阅读上文 >> 使用Storm实现实时大数据分析!
阅读下文 >> 大数据计算:如何仅用1.5KB内存计算十亿个不同的对象

大家喜欢看的

  • 品牌
  • 资讯
  • 展会
  • 视频
  • 图片
  • 供应
  • 求购
  • 商城

版权与免责声明:

凡注明稿件来源的内容均为转载稿或由企业用户注册发布,本网转载出于传递更多信息的目的;如转载稿涉及版权问题,请作者联系我们,同时对于用户评论等信息,本网并不意味着赞同其观点或证实其内容的真实性;


本文地址:http://news.ceoie.com/show-159473.html

转载本站原创文章请注明来源:中贸商网-贸易商务资源网

微信“扫一扫”
即可分享此文章

友情链接

服务热线:0311-89210691 ICP备案号:冀ICP备2023002840号-2