一、什么是上传客户选择算法?
上传客户选择算法是指从排队队列中选择一个客户进入上传队列的算法。由于官方版本采用按照得分的大小决定进入上传队列的次序的算法,所以上传客户选择算法有时候也会被称为评分算法或者排队算法。
二、CN版是怎么实现上传客户选择选择的?
CN版和官方版本不同,没有采用排队算法,而是采用了概率选择。具体步骤如下:
1. 计算每个客户的信用。计算方法:上传量 + 上传量/16 - 下载量。
2. 根据信用计算每个客户的评分。计算方法:按客户信用排序,得到每个客户的名次,评分=1000000/客户名次。
3. 根据文件的优先级计算客户的得分。计算方法:文件的优先级有五级,发布、高、普通、低、很低,每级的调整系数分别为1024、4、1、1/4、1/16,客户的得分=客户的评分*文件优先级调整系数/同时请求下载此文件的客户数。
4. 根据客户的得分选择客户。客户的得分实际上是客户被选择的相对概率。每个客户被选择的绝对概率=客户的得分/总的客户得分。
例外:
1. 未通过安全UserHash认证的客户得分为0。
2. 如果文件上传总量小于文件大小,那么在步骤3中客户的得分=客户的评分*1024,即相当于发布级文件且只有一个客户下载。
3. 文件交换。如果某个客户当前Session的信用为正,而且正在给你上传,那么你立即把他加入上传队列。
4. 公式化社区共享功能中每加1点相当于计算信用时上传量增加1KB。
三、为什么要这样实现CN版的上传客户选择算法?
主要基于以下几点考虑:
1. 充分奖励积极上传的客户,适当惩罚不积极上传的客户。在下载相同文件的时候,第1名的客户的下载机会是第1000名的1000倍,这是充分奖励的体现。对于1000个客户的队列,排名中间的第500名的下载机会是排名最后的2倍,这是适当惩罚的体现。
2. 同样情况下,每个文件的上传机会相同。由于在计算得分时除了同时请求下载的客户数,因此同样优先级的文件的上传概率相同。不同优先级文件的上传概率为他们文件优先级调整系数的比。比如两个文件,第一个只有1个人下载,第二个有1000个人下载,在官方的算法中,恐怕上传队列里都是下载第二个文件的,在CN版中第一个文件能够得到充分的机会共享出去。
3. 只要排队就有机会得到下载机会。选择上传客户的时候,每个客户都有可能被选择,在队列中时间越长的客户得到的选择机会就越多,但是这些机会已经体现在过去的选择中,因此排队队列中客户被选择的机会与时间无关,只要在队列中就有可能被选中。如果上传方采用这种选择方式,你就不必为不能24小时开机而苦恼,你排队的每分钟都可能为你带来下载机会。
4. 两个客户交换文件能够实现最高的性能。参见例外3。一旦开始交换,这种机制能够保证两个CN版客户互通有无。
5. 把自己下载的上传出去是每个客户应尽的义务。参见例外2。尽可能的1:1,这种机制能够尽可能的避免断档。
四、CN版有文件的自动优先级吗?
CN版没有自动优先级,CN版都是自动优先级。对于整个文件的上传机会而言,CN版没有自动优先级。对于单个客户而言,CN版的文件优先级都是自动优先级,会自动的根据下载人数的多少进行调整。由于开发者的懒惰,CN版目前没有去掉自动这一级别,但是无论是什么自动级别,都相当于普通级。
五、为什么在新的CN版中加分的效果不明显?
EMule是一种P2P的文件共享软件,共享文件,使得共享着的文件能够及时地被下载是EMule的主要目的。至于下载文件的是些什么客户就不是EMule主要关心的内容。信用的引入是为了整个EDonkey2000网络的正常发展。新的CN版强调了文件分享的效果,相对的减弱了加分的效果。CN版也有强调信用的方式,加强了些加分的效果,但是我们推荐使用随机选择方式。