BitTorrent 想必大家应该都不陌生,中文名叫做“种子”。

“种子”到底是什么?我一直不太清楚。在写这个项目之前,我对“种子”的认识停留在使用层面。

当我想找一个资源的时候,我会搜索 xxx 种子,一般会在一些非常不知名的小网站里面获取到以 .torrent 结尾的种子文件,然后使用迅雷或者 uTorrent 这样的下载器来下载。

如果迅雷有一点速度,哪怕几 kb,那么大概率我充个会员就搞定了。这个软件就是这么的恶心,不用有时候又没办法,像极了人生。

其他下载器比如 uTorrent 的话就一切随缘了,有些资源非常快,有些资源非常慢,有些一开始慢后来快。

这些问题是怎么回事?有没有改进的办法?在读 Jesse Li 的 Building a BitTorrent client from the ground up in Go 之前,我从没想过。

BitTorrent(BT)

Jesse Li 的博客图文并茂,讲述了如何用 Go 开发一个 BT 的下载器。内容涉及到 BT 协议以及下载器的代码设计,思路清晰,值得一读。

对于喜欢动手的朋友,可以先关掉这篇博客,参考 Jesse 的代码尝试自己写一个 BT 下载器。写完以后再回来,对比我用 Deno 开发的下载器,相信会有不一样的收获。

我们先来看一下 BT 是什么。

Tip
BT 一直在演进,新的功能有 DHT,磁力链接等,这里我们关注早期版本的 BT。

BT 是一个协议,和 HTTP, FTP 一样,是一个应用层的协议,这个协议被设计用来实现 P2P(Peer to Peer) 下载。

P2P 我想大家都很了解,中文翻译为点对点,不仅可以用来下载,还可以用来金融

tinyTorrent: 从头写一个 Deno 的 BitTorrent 下载器相关推荐

  1. 网页mp3提取器_用Python写一个酷狗音乐下载器!

    [这就是标题] 距离上一次发推送差不多有一个月了ヽ(ー_ー)ノ 做了一个小的酷狗音乐下载器,公众号内回复704就可以收到下载链接. 长下面这样. 双击打开,会提示让输入你要搜索的歌曲. 这里输入去流浪 ...

  2. 从头写一个超过zip的压缩算法(1)最简单的压缩算法

    (本人还在读初中,所以文笔有限,请大家包涵) 随书源代码:<从头写一个超过zip的压缩算法>配套代码-C++文档类资源-CSDN下载 说到字典压缩算法,按照字面理解就是建立一个字典,这个字 ...

  3. 从头写一个超过zip的压缩算法(8):学习tek压缩

    tek压缩是个啥?也许很多人连听都没听过.这其实是<30天制作操作系统>中作者埋下的坑.制作系统第29天第二章节(源代码号:harib26b):"文件压缩"中,作者和我 ...

  4. 用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐

    一.前言 QMediaplayer可以用于解析音频文件和视频文件,继承自QMediaObject,涉及到的对象为QMediaContent.QMediaObject可以提供关于媒体内容的接入,通过UR ...

  5. 用Qt写一个简单的音乐播放器(七):界面美化(QSS样式表)

    一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...

  6. python播放wav文件_python3 写一个WAV音频文件播放器的代码

    环境:ubuntu 16.04 python3.5 pycharm 包 : wave pyaudio sys 上代码:AudioPlayer.py # coding:utf-8 # author:ki ...

  7. HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌)

    用HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌) 效果如下:(鼠标点击按钮可以实现播放或暂停,按钮会旋转,实现了歌词同步,功能还需改进) 代码如下: <!DOCTYPE htm ...

  8. 用Qt写一个简单的音乐播放器(三):增加界面(播放跳转与音量控制)

    一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...

  9. python写音乐播放器_AJ Kipper:用Python写一个简易的MP3播放器

    用Python写一个简易的MP3播放器 前言 最近在学习Web.py框架的时候,了解了基本的Python连接数据库(MySQL)的方法.学完后,总想用它来干点啥,于是,就想能不能写一个MP3播放器.一 ...

  10. 用Qt写一个简单的音乐播放器(六):显示歌词(正则表达式)

    一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...

最新文章

  1. ARM平台硬件时钟中断周期HZ值计算
  2. 条件限制select into_SQL全部知识点(夺回控制台掌控权,转义符,SELECT特定列,AND,OR,查询数值,比较运算)...
  3. 经典的”服务器最多65536个连接”误解
  4. nyist -- 组队赛(二)
  5. Vue实践--v-model实现简易计算器
  6. TypeError: Cannot read property ‘publish‘ of undefined“报错问题解决
  7. iPhone13系列预计5499起;蔚来回应31岁企业家“自动驾驶”车祸去世;小米取消MIX4防丢失模式无卡联网服务|极客头条...
  8. 在eclipse如何删除无效的maven build
  9. 关于微信隐藏分享按钮的心得
  10. oracle 安装包_【Oracle监控】-Spotlight On Oracle安装和使用
  11. 车载颚式移动破碎机让资源重生,刻不容缓
  12. 对豆瓣电影Top250榜单的一些探索性分析
  13. 软件生存周期、项目生命周期、产品生命周期区别
  14. 编程练习:头条校招题
  15. ATLAS什么时候增加服务器,Atlas新手怎么选服务器_Atlas新手服务器选择技巧_快吧单机游戏...
  16. ubuntu删除旧的linux内核
  17. 易语言制作计算机按键指令,关于易语言编写计算器的问题(完整代码!!!!!!!)
  18. 近红外光谱特征选择、特征提取区别及稀疏表示
  19. 每个程序员应该知道的计算机网络知识
  20. LFLytroDecodeImage-从原始lenslet图像解码Lytro光场

热门文章

  1. 《云周刊》第121期:图管够!灌篮高手、女儿国…阿里日_这帮程序员太会玩了!...
  2. python局域网大文件_利用Python+pyftpdlib实现在局域网中互传文件
  3. 德保罗大学计算机科学专业,德保罗大学专业
  4. 微信网站域名如何做防封和防屏蔽技术
  5. 锐取电视墙服务器型号,锐取录播系统 CL4000系列多媒体录播一体机--投影时代产品专区...
  6. wps可以用来学计算机考试吗,国产软件WPS成全国计算机二级考试科目,你确定不来学点编程...
  7. 03-平方矩阵的快速解法
  8. java 伊甸园_离伊甸园仅一步之遥
  9. 计算机断层CT检查肺部混浊,揪出早期肺癌 低剂量电脑断层检查
  10. 快递物流行业总结(一)中国快递行业生命周期理论