首页 脚本专栏 正文

bitcomet1.0 教程:用golang从零开始手写一个bt下载客户端

教程:用golang从零开始手写一个bt下载客户端

概述

当我们通过bt下载一个文件的时候,有没有想过为什么bt下载会比普通下载要快呢?这中间到底经历了哪些有趣的事情呢?这篇文章将为大家揭晓bt下载的秘密,并且我们将从零开始用golang手写一个bt下载的客户端,其他语言类似。

目录

本教程将分为两部分来详细介绍bt下载的细节:

1.通过示例演示bt下载的基本流程和原理

2.使用golang从0开始手写一个bt下载的客户端

3.针对客户端的缺点讨论改进方案

bt下载原理

BitTorrent是一个从互联网下载和分发文件的协议,在传统的client/server架构中,下载者们通常都从一个中心服务器获得一个完整文件内容,但在BitTorrent网络中,下载者们通常从其他人那里下载一个文件的分片,并且分享自己已经下载的分片,这样就构成了一个p2p(peer-to-peer)网络。用图片来描述就是:

cs网络和p2p网络

概念

当我们要通过p2p网络下载一个文件时,我们首先会得到一个.torrent格式的文件,里面包含了要下载的文件的信息:从哪里知道其他人也在下载改文件,文件的指纹信息等。接下来需要解决的问题就是:我们如何找到其他的peers,这就像你想移民但你自己又没有途径,这时候你可以找一个中介,这个中介我们称之为tracker,他记录了peers的通信方式,peer和peer之间可以通过tracker来发现彼此。当我们获得了其他peers的信息之后,就可以和他们进行连接并下载文件了。拥有完整资源的peer都可以做种子。

搭建P2P网络

因此接下来我们将在本机手动搭建一个p2p网络,用以演示p2p的工作原理。首先需要一个tracker服务器BitCometTracker,peers们可以注册自己到该服务器,其他人从tracker服务器获得peers的列表。接下来需要用两个bt客户端,我们选择BitComet和qBittorrent。uTorrent有广告和流氓软件,所以不用他。

1.启动BitCometTracker,启动后会显示使用的端口8080

2.启动BitComet客户端,点击“文件”-》“制作torrent文件”-》选择一个文件,填写tracker服务器地址为http://127.0.0.1:8080/announce,任务列表中就会出现一个待上传的列表。这个过程俗称“做种”

bt种子

3.把刚才生成的.torrent文件拷贝到其他目录,启动qbittorrent客户端,在客户端中载入刚才拷贝过来的.torrent文件,可以看到正在下载

bt下载

好,到现在为止,我们已经了解了BT下载的原理和流程,下篇文章我们将用golang实现一个这样的简易的BT下载客户端。敬请关注!

用过那些号称媲美迅雷的下载神器,发现没一个能打的

关注我,和600万差友一起玩转科技~

说起下载工具,差友们可能第一时间想到的就是迅雷。

托尼平时下载用的最多的也是迅雷,它的下载速度还是可以的,不像百度云那样变态的给你限速到几十 KB ,一般情况下确实能够满足日常使用。

不过迅雷里边那臃肿的功能界面和频繁的弹窗广告,难免还是会让人用着有些不爽。

特别是当你将辛苦搜寻到的链接满怀欣喜地放进迅雷,却遇到资源因为各种原因无法下载的情况,简直会让人抓狂。

俗话说做人不能在一棵树上吊死,下载也一样,没准有其他更好用的软件呢?

托尼在网上搜了一下好像貌似还真有,而且软件的数量貌似还不少。

本着怀疑的态度,托尼特意将这些下载软件全给下载了,看它们是否真的能够替代迅雷。

首先找到的是这款 FDM( Free Download Manager )下载软件。

它是一款经典免费纯粹的下载器,开源无广告,支持 BT、FTP、FTTP 下载以及批量多线程下载等功能。

可以说迅雷拥有的功能它差不多都有了,关键是它的界面还特别简洁,清爽无广告。

但当托尼尝试下载几个资源之后,发现这下载速度,emmm。。。不是比迅雷慢了一点,而是慢了好几倍。

在同一台电脑使用同一个网络的场景下, 迅雷里即使不登账号,不开会员,下载资源的速度也可以达到 3 M/s 。

而在 FDM 里,面对同样的资源,它的下载的速度仅仅只是迅雷的几十分之一,迅雷十几分钟能下载好的资源,FDM 却需要二十多个小时。。。

有些磁力链接或者 bt 种子,甚至不能被很好的识别解析。

别说替代迅雷了,时不时趋零的下载速度最后能不能顺利完成下载也是个问题。

FDM 挑战迅雷失败后,托尼接着又尝试了另外一名叫 Motrix 下载器。

Motrix 可以下载 HTTP、FTP、BT、磁力链接以及百度网盘等资源,并且跨平台支持 Windows、Mac、Linux 三大系统。

软件界面和前面的 FDM 一样干净清爽,下载时的操作逻辑也与迅雷相同,直接拖拽或者黏贴链接即可。

在没有开始下载前,托尼对这款软件还是挺有好感的。

但用它来下载前面的资源时,尴尬的事情又发生了,资源虽然能被识别,它们的下载速度却很统一的停留在了 0 KB/s 。。。

换了其他的几个资源后,托尼才算是体验到了它的下载速度,正常下载时几乎可以赶上迅雷。

不过这款下载器用下来给我的感觉不像是在下载,更像是在赌博,因为你永远不知道你的资源在它这里有没有下载速度, 想要替代迅雷,还差的远。

随后托尼还是不死心,又陆续尝试了 qBittorrent 、Mydm 、BitComet 、Internet Download Manager 等 PC 端的下载器。

虽然它们的界面都比迅雷更简洁,甚至有些下载器在功能上还比迅雷多上不少,但论起下载速度,说实话,托尼觉得没一个能超过迅雷的。

不得不说在电驴、国际快车、QQ 旋风等下载器都凉了之后,迅雷却能风光至今,还是有点技术的。

早些的资源下载采用的是 P2S( Point to Server )技术,用户通过计算机,直接从服务器上下载各种文件。

这种简陋的技术存在不少缺陷。

比如当下载的人数越多,从服务器分享出去的带宽( 每秒传输的数据 )也越多,分配到每台计算机的带宽就越少,下载的速度会变得很慢。

就好比抄作业,如果一位同学抄另外一位同学的作业,不用等很快就能抄完,抄作业的人一旦变多,会明显拖慢抄写的速度。

随后出现的 P2P( Peer to Peer )技术,就对原有的下载方式做了改进。

P2P 使得每台计算机不仅可以从服务器上下载文件,它本身还可以当做服务器提供带宽给其他计算机下载,而且下载的人越多,速度也越快。

这种下载方式就好比每个人都只抄作业中的一部分,再互帮互助从其他人手中抄自己没抄的部分,抄作业的速度自然得到提升。

而迅雷在结合了 P2S 和 P2P 技术后,又进一步做出了改进,在全球首创了 P2SP( Peer to Server & Peer )技术。

P2SP 不但能实现不同计算机之间的数据下载,还可以从多台服务器上下载文件。

服务器的增加,相当于写有答案的作业从原来的一份变成了多份,抄作业的速度再一次得到了提升。

就这样迅雷依靠的 P2SP 技术,加上自家服务器的优势,在资源的下载速度上,开始领先起其他的下载器来。

不过当时 P2SP 技术使用的手段不是很绅士,曾被其他网站指控过其未经许可,擅自盗用别人的服务器资源为己所用。

就好像盗打电话,迅雷不用自家的电话,直接从别人家接条线出来打,而话费却还是由被盗打的人支付,导致迅雷在一段时间内受到不少网站的抵制。

当时某个网站对迅雷的控诉

但不管怎样,迅雷依靠自家服务器和下载技术优势,逐渐成为了国内用户量最大的辅助下载类软件之一。

托尼记得当初的迅雷除了带数字的标准版,还有极速版以及精简版。

那时候的迅雷极速版,无广告,无插件,无捆绑,启动快,下载更快…回归极简,一切只为下载服务,真的就是一款纯粹的下载器。

后来迅雷可能出于商业化的考虑,下架了极速版,在之后迭代更新的版本中增加了浏览器、会员、游戏、直播等功能。

毫无意外的,和其他大多数免费的软件一样,迅雷变得越来越臃肿。

非会员的功能被阉割受限,引导充值会员的广告弹窗越来越频繁,下载时被限速不能充分利用带宽。。。

正如天下没有免费的午餐,在免费享受迅雷下载速度的同时,不可避免的需要付出点代价,毕竟软件本身的维护和运营也需要成本。

至于这些运维成本,最终也统统通过广告的形式,转嫁到了我们消费者身上。

毕竟免费的东西,永远不会是真正的免费。

“ 迅雷还算良心的 ”

相关问答

比特彗星下载速度为零怎么办?

首先,查看你软件中是否有设置不当的代理其次首当其冲应该注意的问题是,你是通过什么接入网络的,是ADSL、长宽(CK)还是FTTPor有线通andsoon...如果是C...

我的比特彗星下载速度为什么那么慢,甚至都没有速度。请问是设置问题还是网络问题?怎么解决?

特彗星下载,一是需要公网IP,二是需要是路由器添加映射和开启UPnP,右下角的端口开放必须是绿色的。公网IP是必须的,映射和UPnP必须要打开。都具备时,你下载只...