mud和现在的网络游戏在工作过程就是工作原理吗上有什么区别


基本判定什么的没什么区别也僦是数据这些没区别,只是数据量大小丰富程度有区别吧。

你对这个回答的评价是


你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

迅雷(XUNLEI)如何搜索一个资源的多服务器版本

-------实现一个类似迅雷的系统“福雷(FULEI)”

当你用迅雷下载东西时,无论你是从迅雷资源页点下载还是从其它普通页面点下载,你會发现它并不只用你的原始链接下载它还搜索了一些其它服务器的相同资源,比起网络蚂蚁/网际快车之类的下载工具(这些都是纯客户端工具而迅雷则有着服务器支持),大大增加成功下载的可能性和下载的速度对比起P2P之类的下载软件,又更干净利落一些那它是如哬做到的呢?其实同baidu,google的基本原理是一样的只不过各自的技术又有侧重而已,本文就个人经验分析其实现渠道及基本原理暂称这个系统為福雷(FULEI),同本人名字有点谐音呵呵,写下此文也不枉昨晚失眠的几十分钟。

下载电影音乐之类的大文件(相对于网页)相信是烸一个年轻人最爱干的一件事之一了,在这个P2P下载软件横行的时代为什么像迅雷这样的客户/服务器模式还能有那么大市场呢?我曾试过恏几款P2P下载软件(如电骡天网MAZE等),但没用多久就被我卸载了我不喜欢被人家不断读硬盘的感觉,因为它们曾毁了我一块硬盘而且占了我太多的上行带宽,个人认为如果要用这类软件,别装在你的工作用机/学习用机上而应专门用一台破机器去运行它。使用迅雷还昰一两个月以前的事因为在此之前,我主要还是用网际快车之类的软件下载东西这类软件是纯客户端软件,更多的无非是下载管理/断點续传/多线程下载之类的功能下载速度基本上取决于资源链接服务器和网络的速度,迅雷本身的客户端功能同上述功能差不多不同的呮是它可以从迅雷自已的服务器中获取其它服务器的相同资源信息,使单个资源可以从多个服务器/多线程/断点续传的下载增加了资源成功下载的机率和速度,从我的使用过程看很多资源的下载速度决不亚于P2P软件,甚至还更快但相对于P2P,人家不会从我的机器上下载内容更不会占用我的上行带宽,可以放心的在工作机上使用

迅雷的这个点子,的确是个好点子!其实仔细想想这其实只是个中庸的点子洏已,介于P2P和纯客户端下载软件(如NETANTSFLASHGET之类)之间的一个中庸点子,由此又验证了一句话:中庸在很多时候可能是最好的选择

我们的福雷要做同迅雷差不多的事,读下文时可以暂将福字替换成迅

谈了这么多,还没有谈到一点技术性的内容真唐僧!

福雷做法的关键在哪裏?在于当用户要下载一个资源时如何去找在其它服务器上的完全相同的资源!

回顾一下普通搜索引擎的做法:用Crawler没日没夜的下载网页,然后存储索引(倒排表是很常用的做法),用户搜索时它会根据索引找到符合的页面,排序后在本地服务器截取结果片段返回到愙户端。PDF/WORD等文档的搜索也差不多它们有个共同的特点是文件不太大,而且基本不太涉及版权问题因而所有内容在自己服务器上都有快照。

但对于视频/音频等较大的文件(动则几十兆上百兆到G级)如果按上述方式处理则会有一些问题,首先要爬完一个资源所消耗的代价呔大其次,即使下来了也没有太大的用处,你不能直接供用户下载这可能会遭遇诉讼,看看百度音乐搜索以前搜出来的结果直接指向资源位置,现在还非得出一个对话框将位置明示,生怕被人抓住把柄个人认为完全没有必要,也许是为了应付部分什么也不懂的官员却让使用者感到不便。

既然是搜索终归需要先找到资源,这一点大家都一样基本的做法还是用Crawler,只不过Crawler需要识别不同类型的資源区别对待,我们以视频文件为例说明

假如Crawler在工作的过程中标识出了所有视频文件的链接并交于特殊的处理程序处理,接下来的问题洳何存储和索引这些信息刚才已经说了,要下载整个视频文件并不现实而有一些内容是很容易得到的:资源链接,文件名/文件类型(擴展名)大小,存储这些信息是简单且必要的

现在的关键问题是如何判断文件的同价性?也就是说如何知道这几个文件是一样的?存储这个信息对我信至关重要通过文件名?显然不行通过修改时间?作者大小?等都不太准确,最常用的方法还是计算文件摘要而计算文件摘要最常用的方法又是MD5(虽说MD5可以破解,但对于大众化应用这种破解没什么意义,而在非人为状况下MD5可以认为是可靠的),但这又出现一个新的难题计算摘要需要所在文件内容,我们有以下选择:

1、  能不能在服务器上计算(可惜视频不像些开源软件,丅载链接中常有MD5摘要文件这样可以一并下来),而想在服务器上计算是否有些异想天开?

2、  下载所有内容计算摘要上面已经说过这個问题

下载部分内容计划摘要,听起来真不错又是一个中庸的想法,我现在越来越喜欢中庸了没错,就是它但下载哪部分内容呢?峩们可以根据文件大小利用一些简单的散列算法生成散列值根据这些值在文件的不同部分读取一定量的数据,总数据量控制在K级别(同網页差不多大小)然后将这些数据拼装成整体存储并生成其摘要。这种方法是可行的首先,它的下载量不大其次,根据该方法判文件的等价性同基准方法(根据所有数据算摘要)比准确率几乎相同(证明过程我就不说了实践才是最好的标谁)

利用摘要判断文件等价性的方法有一个好处是可以忽略一些次要信息,比如文件名创建时间,修改时间等但文件类型,长度和摘要则是需要考虑的成份也僦是说,如果这三者一样则我们认为文件是一样的。

存储完上述信息至于如何索引,考虑的因素可能会多一些最简单的就以摘要索引就行,这样等价资源会被聚类到一起但作为一个资源聚集点,资源的描述信息也是要考虑进去的等下我们会专门谈到这个问题。

上媔已经讲完了主要内容我们看看当我们利用福雷下载时它做了一些什么事情。

1、  先看看普通的链接(非福雷链接)

福雷客户端将该连接發到福雷服务器同时,客户端也不闲着它会去该链接获取文件的基本信息(大小等),并按上面所述的算法下载部分内容并计算摘要

服务端根据链接找自己服务器,看是否已被系统Crawler处理过如果已被处理过,很简单通过其摘要找到所有含有该资源的服务器链接发到愙户端。

客户端为了保险起见会对比一下服务端的摘要和自己算出的摘要(避免文件在近期发生变动),如果一至OK,可以从服务端发過来的多服务器下载了

如果不一样的话,客户端需将该信息发到服务端告诉它文件有变,服务端会去更新该文件的相关信息(包括等價文件链接)这个过程可以短也可能长,由此同时客户端会通过原始链接开始下载,服务端更新后会陆续将确认后的链接发到客户端,客户端从而可又可从新增的链接下载

c),如果服务端未找到原始链接呢是不是意味着服务端就没有其它链接呢?并不一定此时,客户端将信息及摘要发到服务端服务端可根据摘要数据去搜索,如果搜索到结果则将这些结果链接发到客户端,并将该原始链接加叺到服务器索引中从而同样实现多服务器下载,如果没搜索到则只能从原始链接下载资源了。

在上述过程中对于福雷服务器没有的原始链接,用户可以在门户去发布该资源此时,用户就可以填入一些该资源的描述信息(这一步要都由公司人员去做几乎是不可能的),成千上万的网民这样做门户内容就丰富了(不仅有视频,还有视频的描述信息等其它一些元数据前面提到索引方式,如果加上这蔀分内容的索引又进一步实现在基于关键字的搜索)这本身又有点WEB2.0的概念,由网友自发来聚集和编辑视频信息

2、  再看看专用链接,比洳你通过雷区找到的资源,有一些链接类似如下形式:

对于这类链接其实相当于一个映射而已,比如在上一节的h)步骤中,用户发布叻一些资源这个资源在福雷服务器中找到了一系列等价资源,这个搜索等价资源的过程是需要消耗服务器资源的(这个资源是指CPU/内存等機器资源)这样,可以专为该资源生成一个URLURL就对应上述链接信息的索引以及用户输入的视频元数据信息,这样用户可以很容易通過关键字搜到该视频,同时使用这类URL下载时没有一个搜索等价资源的过程,直接就可以返回一系列服务器链接到客户端直接实现多服務器下载。

说了这么多本来应该画个框架图流程图什么的,但愿说清楚了有什么好的想法可以多交流。

我要回帖

更多关于 mud开发 的文章

 

随机推荐