皮皮网

【跑腿外卖APP源码】【学校php源码】【波段圣手 源码】regenerator 源码分析

来源:域名解析接口源码编辑器 时间:2024-12-22 23:20:14

1.Async、码分Await 从源码层面解析其工作原理
2.新手提问:我们安装windows系统的码分时候,是码分不是把windows的源代码复制到本机硬盘下的C盘中了?
3.@babel/polyfill 中文翻译
4.介绍一下EMULE

regenerator 源码分析

Async、Await 从源码层面解析其工作原理

       深入理解 Async 和 Await 的码分工作原理,往往需要从源码层面进行剖析。码分使用 Babel 进行转换后,码分跑腿外卖APP源码可以清晰地发现 Async 和 Await 实际上借助了 switch-case 和 promise,码分实现对流程的码分控制。以一个使用 Async 和 Await 的码分函数为例,我们仅关注核心部分代码。码分

       经过 Babel 转换后的码分 name 函数,可以被拆分为三个主要部分:await 部分、码分return 部分以及 async 流程控制的码分结束部分(即 case "end")。这个拆分使得流程控制变得更为直观。码分在流程控制中,码分每一步执行后,都会等待合适的时机进入下一次执行。

       这个“合适的时机”并非由 Async 内部决定,而是由执行的内容决定。例如,在发送异步请求后,只有在请求返回后才会进入下一个 case。

       为了实现流程控制,需要借助 regenerator-runtime 这个 generator、Async 函数的运行时。它负责将 name 函数进行包装,并添加流程控制所需的信息。如 _context,以及用于流程控制的关键 helper,如 _asyncToGenerator 和 asyncGeneratorStep。通过这些辅助工具,再在 regenerator-runtime 的基础上进行一层包装,最终得到一个可以执行的函数。这个函数实际执行时,会调用封装后的函数。

       在封装后的函数中,async1、async2 等实际上是在执行最终的封装函数内部的调用。这里的第三步是 Async 函数的核心机制。在 Promise.resolve(value).then(_next) 中,value 是每个分段最后的 case 返回的值。如果 value 是一个 Promise,那么在它 resolved 后,会将其.then添加到微任务队列。如果 value 不是一个 Promise,则直接添加,因为.then是一个微任务,当执行到它时,会调用_next,从而开始执行下一个 case。

       经过转换后的代码展示了封装后的函数内容,最终执行的是封装后的函数,因此说 async1、async2 执行实际上是执行封装后的函数。在封装后的函数内部,会调用 async1、async2。

新手提问:我们安装windows系统的时候,是不是把windows的源代码复制到本机硬盘下的C盘中了?

       t;安装和版本问题

       1) eMule对Windows有什么要求?

       eMule能在Windows 版本以上的Windows操作系统下运行。

       1个好的P2P软件需要好的拨号网络的支持,所以Windows 和Windows ME的比较差网络运行情况可能会影响eMule的发挥;相对来说Windows 和Windows XP更适合使用eMule。

       2) 弹出错误信息说oleacc.dll文件找不到?

       使用Windows 的用户在启动eMule的时候可能会出现此错误信息。这个缺损的dll文件可以从Microsoft的 Windows System Update 处获得。

       3) Installer和Binary的区别?

       Installer文件用于第一次安装eMule,它包含了所有必须文件和帮助文档等。执行exe文件通过弹出的指示即可以安装eMule。

       Binary是一个压缩档案文件,你需要把他解压缩(覆盖)到你想要安装的目录,通常用来做升级安装用。

       4) 当我升级eMule版本时候怎样才能保留我的设置和下载到一半的文件信息?

       你只需要安装(或解压)新版本的eMule到你原来版本的安装目录,eMule会自动更新eMule.exe文件,用户设置文件和其他一些用户信息文件都不会被覆盖,原来的设置等都将保留。

       注意请关闭eMule之后才可以安全执行升级新版本,否则可能会导致不可知错误。

       5) 如果从eDonkey/Overnet升级到eMule并保留原来的下载信息?

       这取决于你原来使用的eDonkey/Overnet的版本。

       0.版本以前的eDonkey使用和eMule部分兼用的系统,但是0.以后的eDonkey版本把下载的temp文件分成了很多独立的小文件,使eMule无法再使用。

       老版本的eDonkey升级到eMule,你只需要把eMule的临时文件目录指向原来eDonkey的临时文件目录即可。

       新版本的eDonkey升级到eMule,你可以先使用 OldPart 这个程序把未完成的eDonkey临时文件转化,再用 MetFile Regenerator 程序把它们还原成eMule可用的临时文件。不过,我强烈建议你在升级到eMule先完成原来的下载文件。

       <二>服务器、连接和ID问题

       1) 从哪里可以取得服务器列表?

       – 官方eMule服务器列表更新网址

       2) 哪个服务器是最快最好的?

       没有绝对的最快或者最好的服务器。服务器是用来连接其他eMule用户、搜索文件和搜索源用的。当用户使用全局服务器搜索时,eMule会向列表里的每个服务器询问搜索结果并返回用户。

       同样,下载文件的时候,eMule会在服务器内搜索速度最快的源。

       3) 我需要多长时间更新一次服务器列表?

       如果你正在使用或者经常使用eMule,那么就没有必要刻意去更新服务器列表。eMule的默认设置会在使用过程中不断更新服务器。

       4) 为什么我的eMule连接不上服务器?

       在连接到服务器以前会有短暂的等待时间,也有可能服务器当机或没有响应。如果eMule完全不连接,请确认你的服务器列表是最近更新的;也或者可能是Firewall和Router设置不当造成eMule的连接不畅通。

       还有一点,你必须检查eMule中的 选项 -> 服务器 -> 仅自动连接到静态服务器 ,如果这个选项被选中的话,而同时尼列表中没有可用的静态服务器,eMule同样不会连接。

       5) 为什么我得到的是low ID?

       eMule近当以下端口打开的时候才会完全工作正常(取得high ID)

       • TCP

       • UDP

       • TCP

       当你使用代理服务器、或局域网上网的学校php源码时候,你无法打开公网IP地址机器的以上端口,所以你会获得low ID。

       6) Low ID何High ID有什么区别?

       High ID就是拥有独立公网IP并且能提供端口给eMule工作的用户;此类用户可以和任何eMule兼容客户端连接与下载。

       Low ID一般都是没有公网IP的内网用户,两个Low ID用户之间是无法直接连接的,所以Low ID的用户下载源会相对少一点(无法从其它Low ID用户那里下载)。

       7) 为什么eMule总是从服务器掉线?

       可能有以下原因导致eMule掉线:

       • 下载列表中文件太多(低于v.a会有此问题)

       • 过多的共享文件(低于v.a会有此问题)

       • 服务器端的问题

       • 普通的网络连接问题

       通常情况下eMule会自动重新连接断开的服务器。这一情况并不影响下载。

       <三>速度问题

       1) 有哪些影响下载速度的因素?

       以下这些实际问题可能会影响下载速度:

       • eMule的设置;

       • High ID (防火墙和路由的设置);

       • eMule下载的时间长短;

       • 一个下载文件所获得的源的多少;

       • 临时文件的有效性;

       • 下载文件的流行程度。

       eMule设置中的不当(不恰当的限制、过多的连接数);Low ID(上一章中已介绍)以及过短的运行时间都会减缓下载的速度。还未普及的文件(例如新发布的资源)或者源很少的文件、或者临时文件(part)有损坏都会影响下载速度。

       2) 怎么设置最好呢?

       没有最完美的设置来实现速度最大化,因为下载速度的主要因素还是取决于每个人的Internet连接速度和所使用的操作系统。建议你使用eMule的设置向导来选择正确的设置,其中最重要的是你选对了你的Internet连接速度和操作系统。

       举个例子,比较适用ADSL K带宽的设置如下:

       Windows XP :-

       下载能力: (= / 8)

       上传能力: (= / 8)

       下载限速:

       上传限速: (= x 0,)

       硬性限制:

       最大连接数:

       最大新建连接数/ 5 sec:

       同时下载6-个文件比较合适。

       Windows / ME :-

       下载能力: (= / 8)

       上传能力: (= / 8)

       下载限速:

       上传限速: (= x 0,)

       硬性限制:

       最大连接数:

       最大新建连接数/ 5 sec:

       同时下载不要超过个文件比较合适。

       你无须太谨慎地限速,太苛刻的限速会阻塞eMule的连接,直接导致下载效果下降。上传限速基本上差不多应该在最大上传能力的%。

       3) 怎样才能提高我的下载速度?

       除了正确的设置以外,能决定速度的还有你所下载的文件本身。为了得到令人满意的速度速度,你尽可能做到以下方面:

       • eMule尽量开的时间维持的长些,越长越好;

       • 尽量避免只下载1个文件;

       • 有选择余地的情况下,尽可能选择源多的文件下载(文件名后面数字表示源的数量);

       • 新发布的文件(全新的文件)不可能速度快;

       • 尽可能多的上传以获得比较高的积分;

       4) 我可能会获得怎样的速度?

       如果一切设置正常,并且在开始一段时间以后,你获得了 kB/s – kB/s的速度,那么可能在短时间内依然会很慢,但有时你却可能获得超过稳定速度2-3倍的速度。

       5) 等待状态会维持多长时间?

       等待状态中你可以从源那里看到QR:[x],这个数字x就是你的Queue Ranking,也就是你在等待队伍中排在第几位,当然这个值越小越好。QR的存在显示了积分系统的意义,相对于源来说越高的积分就是越短地等待。如果你的QR值很高,并不表示你就无法从那个源那里下载到东西,eMule里存在很多公平的修正以减短等待时间。

       <四>积分问题

       1) 积分是什么?为什么我要增加积分?

       积分是奖励那些上传的用户的,上传量越大积分越高。积分不是所有服务器之间通用的,它们仅仅通用于那些承认这些积分的服务器和客户(比如我在chinese edonkey server NO.1上的上传量很大,相对于那些连在No.1上的用户来说我的积分就很高) 。

       积分是影响QR的主要因素,你积分越高,排队时间就会缩减的越短。

       2) 从什么地方我可以看出我的积分多少?

       为了防止使用作弊的方法篡改积分,所以你的积分不是储存在你的硬盘中,而是存在其他客户的硬盘中。要在本机上查询自己的积分是不可能的。

       3) 我丢失/删除了我的clients.met文件,是不是我的积分就没了?

       根据上个问题,丢失了这个文件,你自己的积分是不会消失的,而存在你机器上的相对你而言的他人的积分就没了。eMule建立并保存了备份文件以防止这种事情发生,名称是clients.met.BAK,你只需要把它重命名回clients.met即可。

       4) 积分是否安全可靠?

       eMule使用了一种加密方法key handshake以确保某个积分正确地属于某个人。只有在这种方法得到eMule的验证之后,这一积分才被授权给特定的某个人,否则eMule将不会承认对方的积分。

       5) 什么情况下我的积分会得不到承认?

       根据上一个问题所述,积分是经过加密并授权的。授权的验证密钥储存在preferences.dat和cryptkey.dat两个文件中。如果其中一个文件损坏或者丢失,你将不能得到对方的积分验证,eMule将不会承认原本应该属于你的积分。

       如果你丢失了cryptkey.dat,eMule会强制删除preferences.dat。

       <五>下载和共享问题

       1) 为什么我下载的文件从列表中消失了?

       可能是因为死机、或者升级到新版本造成的。

       • 在 选项 -> 目录 里检查一下临时文件目录是不是正确。

       • 把.part.met文件用它们的自动备份文件.part.met.BAK代替。

       • 看看能否在帮助文件的Troubleshooting这一章节找到答案。

       2) 传输状态的进度条表示的是什么意思?

       不同的颜色表示了不同进度的活动性。

       黑色

       表示这部分文件你已经获得了。

       红色

       表示这部分文件没有源,处于未知状态。

       不同程度的蓝色,代表了这部分文件处于有源并活动的状态,蓝色越深表明源越多、活动性越强。

       **

       表示这部分文件正在被下载。

       顶端的绿色条表示下载的进度。

       完整的一条绿色状态表示整个文件已经下载完成。

       一条深红色表示这个文件处于暂停或者停止状态。

       如果你双击展开一个下载中的文件,其中的颜色有不一样的说法:

       黑色说明你已经获得的部分。

       蓝色部分是你仍需下载的部分。

       灰色说明了这个源也缺损这部分文件。

       绿色表示了当前正在下载的部分。

       **表示未决的部分(已请求)。

       在上传栏目中,同样有类似的颜色状态条:

       黑色表示这名用户已经获得的部分。

       灰色表示用户缺损的部分。

       绿色表示你正在上传给这名用户的部分。

       **表示未决的部分(已请求)。

       共享文件的颜色状态条:

       红色表示在已知的源中找不到的部分(未传播开)。

       不同程度的蓝色告诉你这个文件的传播程度,颜色越深传播的越广。

       3) 那些在来源一栏中的数字 xx / yy +aa (zz) 表是什么?

       这些数字表示在下载中找到的源。

       • xx - 可用的波段圣手 源码源的数目。

       • yy - 总共找到的源的数目。

       • + aa - 已请求另一个文件的源的数目(仅当你在高级控制中选择使用eMule才会显示这个数字)。

       • zz - 现在正在和你传输的源的数目。

       4) 为什么有些源显示“已请求另一个文件”?

       eMule在对方源的队伍中只会占有一个位置。如果对方源内有你需要下载的2个以上文件,eMule只会为其中一个文件排队。当这个文件下载完成,eMule会自动切换到另一个文件并排队,以此类推。所以对方源就会对你现在无法进行排队的文件显示“已请求另一个文件”。这一功能称作A4AF(Ask for Another File)功能。

       5) 过多连接数表示什么意思?

       这表示找到的源的数目超过的你设定的最大连接数。这通常因为列表里有太多下载中的文件,或者用户的硬性限制太过苛刻所造成。

       6) 我可以更改下载文件的文件名吗?

       你可以任意更改下载的文件名,因为eMule不是凭文件名来判断一个文件,而是看每个文件不同的hash值来确定唯一的文件。右键点击一个下载名,选择 显示文件详情 --> 文件名,就可以更改文件名。建议先暂停或停止下载的状态下再改名。

       7) 下载文件前面的红色和绿色的惊叹号表示什么?

       惊叹号表示了对这一下载的等级的评定。

       •

       = 积极的等级(文件被网友评定为优等的、高质量的)

       •

       = 负面的等级(例如文件有病毒、文件是损毁的、或者文件是冒牌的)

       8) 我怎么对某个文件进行评定或添加等级?

       在共享文件中,对某个文件点右键,然后选择 更改这个文件的注释... 就可以修改这个文件的评论和评分。

       希望大家对文件有公平公正的评价!

       9) 我怎样才能知道一个文件是冒牌的呢?

       你可以从找到的文件名判断。右键点击任意一个下载文件 -> 显示文件详情 -> 文件名。在这里你可以看到所有这个文件的其他文件名,如果其他文件名和这个文件相矛盾或者差很多,就可以判断可能是冒牌的(往往可以判断出是否是真的DVDRip或者枪版)。

       ) 我的下载为什么完成不了?

       如果一个文件长时间没有下载完成,可能有以下2个方面的原因:

       • 没有完整的源:-

       如果状态条始终是红色的,从来未变成过蓝色;或者你找到的源都是和你缺损同一个部分的。那就说明这个文件的源缺损了,我们称这个文件死了。可能造成的原因是这个文件还没有全部传播出去(比如仅仅开头%曾经被人下载过),发布者就不共享这个文件了。

       • 文件损毁:-

       在eMule的服务器按钮下的Log窗口中,显示A corrupted part has been received。 如果你经常收到的是同一个文件的某个特定部分的损毁报告,那可能着整个文件都已经损毁了(这个情况非常罕见)。

       ) 下载完成了不过显示Errorious?

       这个错误信息经常出现在以下情况:临时文件的存放目录和下载完成的目录不在同一个硬盘,或不在同一个硬盘分区上。eMule不能完成下载的可能性是因为下载完成的目录的那块硬盘分区没有足够的空间了。

       ) 我下载完成了,但是下载目录中却没有文件?

       如果eMule显示一个下载已经完成,但文件却没有转移到下载完成目录,你可以手动调整。

       首先,点击显示文件详情,比较文件的大小以确保它真的已经下载完成。同时记下.part文件的数字,并copy文件名到剪贴板。打开Windows资源管理器,在eMule临时文件目录中找到相应的.part文件,把它移动到你想要放置的目录,把它重命名成你剪贴板里复制过得你想要得文件名(注意扩展名已经不需要.part.met了)即可。

       ) 临时文件目录太占容量,我能否删除它?

       这个文件夹内包含了所有你还未下载完成的文件,删除它就等于删除了你正在下载的文件!eMule在下载完成一个文件之前已经在临时文件目录建立了和源文件大小一样的临时文件,这点类似FlashGet,以确保不会下载到一半产生空间不够的问题。

       ) 我怎样做才能不共享文件呢?

       eMule会自动共享以下文件:

       • 正在下载中的文件;

       • 存放在下载完成目录中的文件,和你手动指定的共享目录中的文件。

       从以上2个目录中把文件移走就可以不共享这些文件(或者把共享目录的勾去掉),但是不共享文件的动作不会影响正在上传的文件传输。

       <六>使用eMule的问题

       ) Tips

       eMule中的绝大多数功能是很容易通过菜单理解并掌握的。右键单击很多东西,例如下载的文件等都可以弹出不同的操作菜单。ALT + x更可以打开一个快捷菜单,非常有用。

       2) 怎样才能添加好友?

       好友可以在消息窗口管理。右键点击好友列表,选择 添加好友,你必须有以下信息才能添加:

       • IP地址 – 这是必须的,询问你要添加的人,向他获取IP;

       • 端口 – 通常情况下是,同样这是必须的;

       • 名字 – 可以输入任何名字,不是必须的。

       另一种添加好友的方法是在传输窗口右键点击任何你获得的源,选择 添加为好友。这样eMule会自动获取所需要的信息。

       3) 怎样分配好友的上传通道?

       右键点击好友,选择“建立好友通道”,当你的好友排到能下载的位置时这个通道会马上激活。

       4) 怎么样才能清空我的搜索历史纪录?

       点击搜索栏,按CTRL(或ALT)然后按DEL。

       5) eMule中的那些图标表示什么意思?

       - 正在从此用户处下载或获取hash值。

       - 在此用户处排队,或正在查询此用户。

       - 正在连接到此用户。

       - 此用户没有我需要的文件部分、或者已请求另一个文件,或者因为Low ID的关系无法连接。

       - 用户的状态未知。

       - 新进的消息。

       - 普通的eDonkey和eMule用户。

       - 兼容eMule协议的用户。

       - 拥有高级分的用户。

       - 有高级分的和兼容eMule协议的用户。

       - 使用mlDonkey的用户。

       - mlDonkey用户并拥有高积分。

       - 使用eDonkey-Overnet-Hybrid用户。mycollab源码接口

       -用户并拥有高积分。

       - 使用Shareaza的用户。

       - Shareaza的用户并拥有高积分。

       - High ID的用户。

       - Low ID的用户。

       - 未连接到服务器。

       - eMule系统栏图标(High ID)。

       - eMule系统栏图标(Low ID)。

       - eMule系统栏图标(未连接到服务器)。

       - 积极的等级(文件被网友评定为优等的、高质量的)。

       - 负面的等级(例如文件有病毒、文件是损毁的、或者文件是冒牌的)。

       6) 我能踢除或阻止特定的用户么?

       不行。这个功能将永远不会在eMule中出现,因为它和eMule的原本的共享理念相矛盾。

       7) 为什么我搜索到的结果只有个?

       搜索会大量增加服务器的负担,为了限制并减轻服务器的负担,eMule设定为返回用户的搜索结果最多只有个。如果你想要更多的无限制的搜索结果,请使用web based search Jigle(在eMule同时也可使用)。

       8) 我需要把我的共享文件的优先权都设置成“高”或者“发布”吗?

       不需要。优先权是照顾某些特定的文件的,这种优先的等级是相对的。如果你把所有文件都设置成“高”,和把所有文件都设置成“低”没有任何区别。

       优先权在上传过程中会特别优待那些“高”和“发布”的文件,也就是说用户从你这里下载“发布”文件的可能性大于优先权“低”的那些文件,排队时间也是前者大大短于后者。

       <七>其他问题

       1) eMule运行的时候为什么许多应用程序会变慢?

       这取决于eMule的设定,eMule可能会打开很多连接并占用很多的带宽。这会减慢其他的Internet应用程序,例如IE。尤其是不恰当的设置或太高的连接数会引起严重的整体效果的下降。

       2) Mod 是什么?

       eMule的源代码是开放的,其中有些人基于源代码开发了修正的版本,称之为Mod,例如eMule Plus。这些版本不被官方的eMule小队所支持。

       3) Mods是否更快活更好呢?

       通常情况下不是。官方的版本是经过长期的编译和测试所得,而modders往往不能在短时间内改变eMule的内核工作原理。所以Mod要取得速度上的突破往往是不太可能的。

       Mods可能会带来一些新特性,同时一些新bugs,可能有些特性你很喜欢。不过有些mod可能带有负面特性,甚至损害整个网络的正常运作。这些制作粗劣的mod根本不能使用,官方的eMule正在努力减少这些mod存在的可能性,并在安全性方面争取杜绝这类mod的产生。

       4) 我收到消息说我的eMule版本不能再继续使用。

       官方版本eMule版本不会产生任何此类的消息,只可能是Mod版本的eMule才会有。如果你是用官方的版本,你可以安全的过滤掉这类消息。

       5) 我从什么地方能得到更多的帮助?

       如果阅读完FAQ你仍然有问题,你可以试试看以下几个方法:

       • 到官方论坛发问(请在论坛内使用搜索功能已确定你要问的问题是否曾经出现过)。

       • 到VeryCD的eMule问题求助区发问,发问前先确定你的问题是否被问过,谢谢!

       • IRC - 在eMule中的IRC主窗口点击 连接 ,进入英语eMule帮助频道,键入 /join #emule。也有其他语言的聊天室, 例如 #emule-french, #emule-spanish 或 #emule-dutch。

       6) eMule是匿名的吗?

       P2P网络传输建立在两个客户的Internet连接之间,为了实现这个传输,双方的IP地址都是公开的。这个IP可使用户被识别和跟踪。

       现阶段,让P2P软件匿名使用的条件是不成熟的(使用匿名代理服务器等方法具有众多的缺点)。

       7) 为什么我关闭了eMule,而我的防火墙却持续报警说有连接端口?

       相对于其他用户,你得eMule是被当作一个源存在的。你所连接过的服务器也会因为你共享过的文件而把你作为一个源传播给其他用户。当你关闭eMule以后,这一信息不会马上消除,所以别的eMule用户仍会尝试连接到你这个源。过一段时间,这样的连接就会消失(因为你的这个源已经失效)。

       8) 什么是IP过滤器?

       IP过滤器是用来阻挡某些特定的对网络有损害的IP地址的。最常用的就是 Lussnig's IP Filter。从他的网站下载一个名为ip.prefix的文件,重命名为ipfilter.dat然后复制到eMule的 ../config目录。然后到eMule里的 选项 -> 安全 -> IP过滤,然后按“刷新”按钮。

       9) 使用eMule下载下来的AVI文件为什么不能播放?

       这其实不是eMule的问题。建议你使用Windows Media Player来播放此类文件。具体需要安装的插件,请看播放DVDRip必备的软件。

       ) 怎样才能获得与AVI相应的字幕文件?

       承接上一个问题,eMule中找到的源往往不是国内的机器上的,所以下载的DVDRip(AVI文件)通常没有配套的字幕,你可以去射手网寻找相应的字幕文件。下载下来之后只需要解压缩到和AVI文件一起,然后把字幕文件重命名和AVI文件同样的文件名即可(注意请保留srt sub等字幕文件的后缀名)。

@babel/polyfill 中文翻译

       自Babel 7.4.0起,推荐不再使用@babel/polyfill,而是直接导入core-js/stable以支持ECMAScript新功能,以及regenerator-runtime/runtime以使用转换后的生成器函数。Babel内置的polyfill包含定制的regenerator runtime和core-js,它模拟了ES+的环境,包括Promise、WeakMap、Array.from、Object.assign等特性。ftp修改源码这些功能通过添加到全局环境和原型对象中来实现。

       由于polyfill需要在源代码运行之前,所以应将其作为dependency而非devDependency。虽然提供了方便,但推荐配合@babel/preset-env和useBuiltIns选项使用,避免不必要的完整polyfill加载。若需使用非阶段4的TC提案,需自行从core-js等其他polyfill库导入,@babel/polyfill未来可能单独提供这些特性。

       在Node、Browserify或Webpack中使用时,应在应用入口文件顶部要求polyfill,确保其在其他代码之前执行。若使用ES6的import语法,也应在入口文件顶部导入。在Webpack中,有多种方式配置,建议根据需求手动导入需要的polyfill,而不是直接导入整个包。

       在浏览器中,从@babel/polyfill的npm发布版dist/polyfill.js中获取polyfill,确保在编译后的Babel代码之前引入。你可以将其添加到编译代码前面,或者在HTML中单独引入。

介绍一下EMULE

       eMule是一个开放的P2P档案分享软件,基于eDonkey的网络协议。eMule这个名称来源于一个动物——骡,所以中文中也称作电骡或骡子等。

       eMule起源

       在年月日一个叫做Merkur的人,他不满意当时的eDonkey 客户端并且坚信自己能做出更出色的P2P软件,于是便着手开发。他凝聚了一批原本在其他领域有出色发挥的程序员在他的周围,eMule工程就此诞生。他的目标是将eDonkey的优点及精华保留下来,并加入新的功能以及使图形界面变得更好。现在eMule的最新版本是0.a。

       现在eMule已是世界上最大并且最可靠的点对点文档共享的客户端软件。感谢开放源代码的政策,使许多开发人员能够对这个工程有所贡献,从而使发布新版本显得更有效率。

       eMule特色

       客户端使用多个途径搜索下载的资源,ED2K、来源交换、Kad共同组成一个可靠的网络结构。

       eMule的排队机制和上传积分系统有助于激励人们共享并上传给他人资源,以使自己更容易、更快速地下载自己想要的资源。

       eMule是完全免费的。也完全没有任何的广告软件。他们这么做是为了乐趣及知识,而不是为了金钱。

       每个下载的文件都会自动检查是否损坏以确保文件的正确性。(FTP却不能保证精确复制)

       智能损坏控制有助于快速修复损坏的部分。

       自动优先权及来源管理系统允许您一次下载许多个资源而无须监视它们。

       预览功能允许您在下载完成之前查看您的视频文件。

       eMule的Web服务特性和Web服务器允许您快速得从网络存取资料。

       能在下载时间里类别以组织和管理文件。

       寻找您想要的资源,eMule提供了一个大范围的搜索方式,包含了:服务器搜索(本地和全球)、基于Web搜索(Jigle和Filedonkey)及Kad网络(仍在测试)。

       eMule还允许您使用非常复杂的布林搜索使搜索更为灵活。

       使用信息及好友系统,您能传送讯息到其他的客户端并可将他们加为您的好友。有好友上线的话,你就能在您的好友列表中看到他(她)。

       使用内建的IRC客户端, 您能和全世界其他的共享者聊天。

       在官方版基础上,有各种各样的修改版本(Mod),提供了各种不同的附加功能。并且这些Mod也都是开放源代码的,这使得eMule的发展突飞猛进。

       eMule与其他P2P软件相比的优点及特色

       客户端使用多个途径搜索下载的资料源,ED2K、来源交换、Kad共同组成一个可靠的网络结构。

       在eMule v0.及后续版本中,可以使用Kad。

       eMule的排队机制和上传积分系统有助于激励人们共享并上传给他人资源,以使自己更容易、更快速地下载自己想要的资源。

       eMule是完全免费的。官方版eMule也完全没有任何的广告软件。

       每个下载的文件都会自动检查是否损坏以确保文件的正确性。(FTP却不能保证精确复制)

       智慧损坏控制有助于快速修复损坏的部分。

       自动优先权及来源管理系统允许一次下载许多个资源而无须监视它们。

       预览功能可在下载完成之前查看影片。

       eMule的Web服务特性和Web服务器允许使用者快速得从网络存取资料。

       能在下载时间里类别以组织和管理文件。

       寻找想要的资源,eMule提供了一个大范围的搜索方式,包含了:服务器搜索(本地和全球)、基于Web搜索(Jigle 和 Filedonkey)及Kad网络(仍在测试)。

       允许使用非常复杂的布林搜索使搜索更为灵活。

       使用信息及好友系统,能传送讯息到其他的客户端并可将他们加为好友。有好友上线的话,就能在好友列表中看到他(她)。

       使用内建的IRC客户端, 使用者能和全世界的共享者聊天。

       1)P2P到底是什么?

       Peer-to-peer的缩写,指的是点对点的意思,最早是在美国由 岁的Shawn Fanning开发出一个叫Napster的软件时,引入得概念 ,它不仅仅是一种软件架构,也是一种社会模式的体现,网络上流行的P2P软件的架构手段主要有两种:集中式和分布式。

       集中式:便是利用服务器作为媒介使各个分散的节点(用户)能互相联系,生成各种服务响应。

       分布式:每个节点即做服务器又做客户端,这种方式非常灵活,一个孤立的节点只要连上另一个节点便可以进行传输。

       Napster可以说是第一代p2p软件。后来由于Napster陷入诉讼危机(相关版权问题),便出现了Gnutella,它吸取了Napster的失败教训,将P2P的理念更推进一步:它不存在中枢目录服务器,用户只要安装了该软件,立即变成一台能够提供完整目录和文件服务的服务器,并会自动搜寻其它同类服务器,从而联成一台由无数PC组成的网络超级服务器。传统网络的Server和Client在它的面前被重新定义。Gnutella作为第二代p2p软件,他们可以说是最早的p2p技术。然后FastTrack (即Kazaa 的底层技术)迅速掘起取代其地位。成为p2p老大。

       2)emule到底是什么?

       随着二代技术的普及,又一个的问题诞生了,自私的人们在利用P2P软件的时候大多只愿"获取”,而不愿"共享”,P2P的发展遇到了意识的发展瓶颈。不过,一头"骡”很快改变了游戏规则,它就是后来鼎鼎大名的 eDonkey。这标志着第三代p2p技术的兴起,eDonkey采用了以"分散式杂凑表”(distributed hash tables )为诉求的Neonet技术,改变了P2P网络上的搜索方式,理论上可以更有效率的搜索更多的电脑,以及更容易找出少见的文件。这种技术已经使eDonkey基本快要追上了P2P服务龙头业界的另一个老大Kazaa了. eDonkey由Jed McCaleb在年创立。他最重要的是可以同时从许多人那里下载同一个文件,并且采用了"多源文件传输协议”(MFTP,the Multisource FileTransfer Protocol)。电骡的索引服务器并不集中在一起的,而是各人私有的,遍布全世界,每一个人都可以运行电骡服务器,同时共享的文件索引为被称为"ed2k-quicklink”的连接,文件前缀"ED2K://”。同时,在协议中,定义了一系列传输、压缩和打包的标准,甚至还定义了一套积分的标准,你上传的数据量越大,积分越高,下载的速度也越快。而且每个文件都有有md5-hash的超级链接标示,这使得该文件独一无二,并且在整个网络上都可以追踪得到。EDonkey可以通过检索分段从多个用户那里下载文件,最终将下载的文件片断拼成整个文件。而且,只要你得到了一个文件片断,系统就会把这个片断共享给大家,尽管通过选项的设置你可以对上传速度做一些控制,但你无法关闭它。

       在eDonkey出现后,其改良品种eMule(电骡)也出现了。可以说emule是eDonkey的升级版,是eDonkey的一个Mod,就象osp就是quake3的mod一样,它的独到之处在于开源,它的基本原理和运作方式,也都是基于eDonkey, eMule基于eDonkey网络协议,因此能够直接登录eDonkey的各类服务器。eMule同时也提供了很多eDonkey所没有的功能,比如可以自动搜索网络中的服务器、保留搜索结果、与连接用户交换服务器地址和文件、优先下载便于预览的文件头尾部分等等,这些都使得eMule使用起来更加便利,也让它得到了电骡的美誉。

       总之,他们继承了第二代P2P无中心、纯分布式系统的特点,但他们它不再是简单的点到点通信,而是更高效、更复杂的网络通信;再加上eDonkey和eMule引入的强制共享机制,在一定程度上避免了前几代P2P纯个人服务器管理带来的随意性和低效率。

       3)emule的下载原理?

       当你在搜索列表中选取了你要的文件并开始下载后,emule会记录下这个文件的大小,文件名以及另一个叫做hash的特殊值。会向所有添加的服务器发出请求,要求得到有相同hash值的文件。而服务器则返回持有这个文件的用户信息。这样我们的客户端就可以直接的和拥有那个文件的用户沟通,看看是不是可以从他那里下载所需的文件。它最棒的部分就在于:你不是只在一个用户那里下载文件,而是同时从许多个用户那里下载文件。如果另一个用户仅仅只有你要的文件的一个小小片断,他也会自动地把这个片断分享个大家,而你就可以从这个用户的机器上下载这个片断。当然你也是一样。只要你得到了一个文件片断,系统就会把这个片断共享给大家。在查找到下载源(其他客户端)后,下载就是客户端和客户端通过点对点(P2P)进行直接对话了。期间没有数据流通过服务器。

       4)emule是如何工作的?

       emule建立于多点文件传输协议之上。一个emule网络由服务器端和客户端两部分组成。服务器端是客户端连接的、为了搜索和查找可以下载用户的桥梁。服务器列表像电话本一样排列,客户通过浏览它而获取他需要的文件所有者的客户端信息。在download过程中,没有下载文件通过服务器端。

       5)emule是如何搜索的?

       每一个客户端连接到一个服务器作为他的主服务器。在连接时,由客户端告诉主服务器他share了那些文件,以及IP地址等其他信息。所以每一个服务器会记录所有登陆到他服务器上的以上信息。在本服务器搜索时,它会通过匹配记录的已知以上信息把查找结果反馈给搜索的客户端列表。当你使用扩展搜索(extend search)时,你的搜索请求和应答结果通过发送限制带宽的UDP包连接到客户端本身的服务器列表(server.met)对应的某一个ip地址的服务器。

       6)emule是如何下载的?

       当客户端选择了一个文件下载时,它首先收集一个拥有该文档的客户端的列表。它会先行查询主服务器所有登陆用户他们是否拥有该文件。然后再连接和查选其他服务器的登陆用户所拥有该文件的客户端列表。一旦它找到拥有该文件的其他客户端,它将请求每个客户端发送这个文件的不同片。直至最后文件由这个不同的片组装成一个完整的文件。 在进行pause/resume的时候,我们选择的下载列表已经获取,它pause的仅仅是客户端和客户端之间的TCP连接然后恢复TCP连接。这个过程只有再resume时通过客户端向服务器端发送个字节后即可。占用的仅仅是个字节的网络流量。在pause是甚至不通过你登陆的服务器进行,也无须你登陆的主服务器进行任何干预和操作。所以说,它并未占用主服务什么资源,只是在你已经和主服务器连接的通道上发送个字节而已。

       7)emule有什么优点?

       不需要服务器来存放共享文件,节省了服务器架设、海量硬盘、网络带宽。 每个用户端节点都同时是文件下载者和提供者。实际上,在你正在下载但还没当完整个文件时,你已经可以把你已下载的部分共享给别人了! 因为emule同时从很多文件提供者那里下载所需的文件最后再拼成整个文件的。加入的人越多,下载速度越快,资源越丰富。 共享方便,每个人在自已的emule里指定一个share目录就可以把自己的文件共享给网络中的其它人了。不必再辛苦地上传到服务器上了。

       以上就是关于emule的一些基础知识,希望大家看完之后,能对emule的原理,有一个本质的认识。

       下面我再来说说一些很困扰,很迷惑人的问题。

       1)id问题

       朋友们最关心的就是这个问题,id是什么?id其实没有什么用,id就是在emule传输里面,作为地址作用的一个东西,起到寻址和定址作用,它直接和我们ip挂钩,是由emule根据我们的ip地址,通过算法得到的一组数字。所以adsl用户经常会说,为什么我的id变了?当然要变,因为你每次上网拨号所取得的ip地址都不相同,所以id当然也要随之变化,一句话;ip不变id就不变,ip变了id就变化。

       关于高id和低id,目前好多朋友也存在一个误区,认为同一个ip地址,只能而且最多只能拥有一个高id,其实这是不对的。一个公网ip地址,可以同时取得2个以上的高id,这一点我要在这里强调一下,比如,adsl用户,如果你本身是高id,那么你可以同时打开第二个emule两个同时运行,但是彼此的emule端口一定不要相同,这样你会发现两个都是高id,同一个ip地址。同样对于端口映射,同一个ip地址,也可以同时取得两个以上高id,同样端口不要相同。

       对于低id用户,还存在一个误区,那就是认为只要映射了,就能变成高id,这一点我要说明一下,什么叫高id,它是一个9位以上的id数字,它代表了你的ip地址是公网独立的ip,也就是说只有前提你能够拥有公网独立的ip地址,你才能获得高id,端口映射的原理是把你的内网地址和端口,通过地址转换投影到公网干线上,使你作为一个公网节点,从而变成高id。那么这里就存在一个网络拓扑的问题,有些低id用户,不是处在公网干线的一级子网内,而是子网的下一级子网,甚至下好几级子网,拓扑的结构是层层拓扑,那么这部分用户,无论如何也无法获得高id,因为你做了映射只不过是成了上一级子网的节点,但是仍然还是内网,只不过映射了一层,你上面还有好几层,所以要正确看待映射的问题。目前,国内除了电信和网通,有好多二级运营商玩的就是这个路子,他们或者层层拓扑,或者只保留部分公网ip地址,作为机动分配,这样你运气好一拨号能得到一个公网ip,你运气不好就是内网,没有办法。

       3)kad问题

       好多朋友对这个东西始终不太明白,我说一下,kad和我们目前的ed2k不一样,我们目前的ed2k要通过服务器进行中转,我们都要连到服务上才能进行传输,而kad则是无服务器工作模式,它的传输可以独立进行,完全不需要服务器参与,我们只需要打开kad就可以不再需要服务器了,所以说kad是属于试验阶段,应该说他的前景最为光明,应该是p2p的未来,所以建议朋友们多多打开,对于找源很有帮助,特别是对于低id而言,vkad就是vnn+kad的模式。

       4)服务器问题

       这个问题论坛已经说了很多了,我主要说一些大家容易误会的地方,好多朋友经常问到,怎么我的服务器少了,或者是消失了,或者开机提示列表文件丢失,这里大家要注意在emule>选项>服务器设置里面 启用智能lowid检测这一项最好不要选 启动自动更新服务器列表也不要选 把连接到其它服务器时自动更新选上,这样你可以在服务器切换的时候,自动更新服务器列表 而不用添加什么列表的url网址之类的东西,另外对于常用的服务器,最好把他的状态选择为静态服务器,这样他就不会消失了,其实我们服务器列表有多个服务器,能够用上的就那么几个,大家可以把他们设置成高级,静态,另外还要说一点,选择服务器的时候选择ping值小的 人数多的 文件多的 这个文件数什么意思,是连接到这个服务器的所有用户的共享文件总数,要注意服务器上没有任何文件,另外大家注意一下服务器列表里面,每个服务器还有:软性文件限制 硬性文件限制, 这个是什么意思?他代表了服务器接受你的共享文件 任务列表文件的大小限制,如果你要是超过了这个限制,就会被服务器拒绝,举个例子,如果这个值显示的是1k,那么你的共享文件数最好少于个,目前来看大部分都是1k。

       其实对于服务器端,有好多愿意研究的朋友,很感兴趣。其实他就是edonkey的服务器,二者目前列表都一样,所以大家想要自己架设em服务器,可以上edonkey网站,下载服务器端的程序,我看了一下这个程序不大,而且也很简单,有兴趣的朋友们可以自己分析一下。

       5)web服务器问题

       大家都看了在emule>服务器>我的信息 最下面总是有一个web服务器的东西,这个是什么?我说一下 通常情况下我们这个禁用是正常的,Web服务器的作用是提供了远程访问eMule的功能,我们可以先在emule端配置一些相关参数,然后可以实现远程利用ie来对emule进行控制,当然了需要我们emule端要有独立的访问地址,远程控制emule可以实现emule的大部分功能,但是不是全部功能,还是有一些限制。另外对于emule端的web设置,懂行的朋友还可以自己进行编程,很有交互性,一般来讲,我们什么时候能够用上它呢?比如我们在公司开了emule,但是还想下班后继续在家里操作公司的emule,那么我们就可以使用这个功能,如此还有许多场合和环境特别利于web功能的使用,但是要注意随之带来的有关网络安全性问题也很重要。对于这个功能的使用,要是详细写出来的话,要很长需要专门的一个主题说明,由于篇幅限制,我在这里先简单说一下,如果朋友们都比较感兴趣,我考虑单独写一个主题详细说明具体设置和用法。不再赘述。

       6)emule日志问题

       其实这个问题没什么好说的,日志就是记载了emule的运行记录,我要强调的是好多朋友不懂得利用它,其实大部分emule遇到问题的时候,我们如果仔细注意日志记录,都会自己找到问题原因所在,如果你不懂你可以把它复制下来,发到网上,希望各位朋友以后多多注意emule的日志记录,遇到问题,多半能都自己解决。

       7)任务下载问题

       对于这个问题,我想说得是大家要学会使用给任务分优先级来控制下载顺序,经常有许多朋友抱怨,为什么任务结束一个,开始下一个的时候是随机开始,怎么能实现自动控制?这里我们就可以手动设置任务列表里面任务的优先级,右键就可以看到,把不同任务的优先级设置成高 中 低 这样emule在完成一个的时候自然按照优先级去选择下一个该是谁,而不会随机开始了,另外在选项里面也可以设置一下,新建任务为停止模式,或者自动开始下一个停止文件。

       8)搜索问题

       其实要是大家都学会了利用该功能,就会找到好多意想不到的东西,好多朋友平时很少用这个功能,其实p2p引以为自豪的就是他的搜索功能,建议大家以后多多自己搜索,搜索的时候要注意,每页都有条的限制,所以要想看更多的可以点击旁边的"更多”,这样可以显示下一个条,可不要以为就只有第一页的条记录啊!对于搜索颜色问题我说明一下:

       红色:代表你的任务列表里面已经有的文件 或者 你已经下载完成正在共享的文件

       蓝色:普及程度较高源比较多的文件

       黑色:你从来都没有下载过的文件

       9)共享文件问题

       这个我说明一个问题,emule 里面规定共享的单个文件,注意是"单个”文件不可以超过4g,如果超过了,则不可以进行hash,所以大家注意一下。

       )emule消息问题

       经常有朋友会受到You Was Banned!!! Banreason: You use a Leecher Mod

       或者Defcon Old Leecherdetection之类的消息,这是什么意思?

       有些朋友以为是有人要聊天,发送过来的消息,其实误会了,这是自动发送的信息,它的意思是你用的版本是吸血的版本。你已经被ban。对于这个消息,大家可以不用理会,用emule消息过滤,把它过滤掉就可以了,为什么会如此呢?这个要是说起来也话长了,颇有点传奇色彩。我简单说说,部分mod版本呢,由于加分设置不同,逐渐分成不同的派别,这样逐渐形成了一些小圈子,后来搞出来一个所谓吸血的东西,只下载不上传,或是该版本群体上传远远小于下载,等等这里面有好多渊源,后来官方公开封禁了一些,再后来自然被封的不服,然后就是妖魔和反妖魔大家互相封禁,互相职责,后来斗争扩大化,导致其他版本也跟着遭殃,我们就是属于被误伤的,现在这种争斗仍然在继续,而且波及越来越广,这就是我对这个消息的原因的简单解释,好多内幕的东西,说起来挺多,不多说了。

       )代理问题

       这里我要说明一点,好多朋友使用代理运行emule,比如一些公司内网的朋友,你们在寻找代理的时候,尽量使用sock5的代理,当然sock4和http也可以,但是要注意好多http代理本身不支持udp协议,所以导致了emule无法运行,大家要注意,选择支持udp协议的代理。而且多找几个,留作备用。

       )统计信息问题

       这个问题,我要说两点

       (1)上传:下载比例问题 之前好多朋友对这个有很多误会,这里我要说明这个比例大于1说明你的贡献大于索取,等于1,说明你的贡献和索取一致。小于1,则说明了你是一个索取的人,对p2p的贡献为负。大家一定要注意谁比谁,哪个是分母,哪个是分子,那么这有什么用呢?要注意p2p是一个讲究奉献,讲究积分的东西,你的上传多,你的下载快,这个比例也说明了使用者素质问题,另外对于这个比例,我们也有一些奖惩措施,比如 上传:下载大于2,也就是说明了你的上传量是下载量的2倍,这个时候你在排队的时候,就可以享受优先排队待遇,这个比值越大越好,不存在什么限制,越大说明你的上传量越多,说明你的积分越多,你的贡献越多,当然你排队的时间就越少。如果这个比值小于1,而且越来越小,那么同样你的速度也会越来越慢,这个你怨不了谁。

       (2)速度大小的问题 好多朋友往往只关注了那个最大速度,但是实际上那个数值没有什么意义,他只是一个曲线峰值,往往一闪即逝,或者最多持续几秒,我们要关注的是我们的平均速度,这个二元值包含了时间的因素,所以他才能说明我们emule的整体速度大小。

       )积分问题

       积分不是你对所有人的积分,只是在你机器下载的人他们的EM对你的积分,比如你开放的带宽大,小A在你那里下的很舒服,你就在小A那里的分数高。同样,小A那里也有一群人在下他的资料其中也有你,由于你开放的带宽多小A在你那里下的多,你在小A那里的积分就高,你就比其他在小A那里下载东西的人有优先下载小A资料的权限(小A可以设置高、普通这些的,设置高的时候就只有积分高的人优先下了)。

       自己是无法看自己的积分的,因为这个积分不是永恒的,只是暂时针对一个文件的。

       )好友通道问题

       我说明一点,加为好友开通通道,起到的作用只是,可以缩短你的排队时间,使你的信用积分突然变大,此外没有任何作用,他和速度没有本质的联系。

       )tag问题

       好多朋友到现在也不明白为什么要有个[chn]有个[VeryCD],这个有什么用,其实这个名称是任意的,甚至重名都没有问题,因为p2p世界里面判断你的标志是userhash,而不是用户名,用户名你随便改,一天一个新名字也不会影响你的积分,tag的作用是为了让一些服务器判断,从而可以连接该服务器,有的服务器就是规定了如果你不加[*****]就是不让你连接,所以就加上他连接方便点,另外有的mod可以实现对有相关[****]进行加分,比如我们vc版本对有[chn]的朋友就有固定的加分设置,它可以使所有有这个[chn]的朋友积分比没有这个的人多,从而达到中国人优先下载优先上传的问题,当然了这个问题,现在在世界范围内,仍是一个争论的话题,到底是否应该加分,大家也是众说纷纭。其实,懂行的朋友可以自己设置加分,可以随心所欲给任何[*****]加分减分,也可以给任意userhash加分减分,以达到优先上传优先下载的目的,甚至可以达到任意ban人的目的。当然了,这个问题不合适公开讨论,有违背p2p的根本,这里点到为止。

       )对于如何隐藏emule头像的问题

       对于一些在公司工作的朋友,这一直是一个困扰很久的问题,如何还能下载,还不让老板发现。这里我说两个解决方案

       (1)使用第三方软件解决 可以使用SysTrayX软件,这个软件,国内大型软件站都有下载,它是一个管理系统托盘的软件,非常简单,具体使用方法,大家一看就明白了,他可以做到隐藏emule头像的问题,

       (2)使用系统服务解决 我们知道在以上系统中都有srvany服务,借助这个服务,也可以实现隐藏头像 不借助第三方软件 同样server系统可以用终端服务来实现隐藏头像,另外还可以借助instsrv服务来实现隐藏头像,原理和前面一样,其实就是一个东西,这种方法原理,常见于一些黑客网站,其实有些木马软件,或者后台软件,就是用的这个方案。大家有兴趣可以上一些黑客网站研究研究。

       )关于emule和bt的相关问题

       好多朋友都在使用bt的同时,也在使用emule,我这里说一点,对于bt文件,如果我们下到了一半,没有种了,或者非常慢,我们可以把它导入emule下载,用dmTorrent2Par和Jcd2Met或者 Edonkeydoctor或者MetFileRegenerator,都可以实现该功能,很简单,另外emule的文件同样也可以导入bt进行下载,二者可以相互转换。为什么要说这一点呢,是要提醒大家,其实有好多emule的辅助工具,都可以帮我们更好的使用emule,它不是孤立的,只不过国内兴起的比较晚,目前来看,只要edonkey能用的相关软件,emule都能使用。比如,关于重建met的edonkeydoctor软件,就可以使一些下载了很多的错误文件,直接进行修复而不是像以前那样把辛苦下到的删掉。是我们遇到问题需要关闭的时候,不用再担心要删除文件了