内容简介:和百度网盘下载相关的内容我们就介绍到这里。下面我们主要介绍框架和实现相关的东西,如果你刚好想做一个桌面软件,可以参考借鉴一下。BND2 基于
BND2 简介
BND2 是一款图形界面的百度不限速下载器,支持 64 位 Windows 和 Mac,仅提供给 黑客派 会员使用。
高速下载原理
- 通过 PCS API 获得文件、下载链接
- 通过 Aria2 实现高速下载
和百度网盘下载相关的内容我们就介绍到这里。下面我们主要介绍框架和实现相关的东西,如果你刚好想做一个桌面软件,可以参考借鉴一下。
技术架构
BND2 基于 Electron 、 React 、 golang 实现,通过主框架 - UI - 内核的分离实现 UI 以及内核的自动更新。
<webview>
为什么选 Electron、React 和 golang
在选择 Electron 之前,我们大致看了下 NW.js 和 CEF,他们肯定都可以实现我们想要的,仅从文档和社区上看,Electron 比较和胃口
React 和 golang 的选择是因为我们开发团队对这两个技术比较熟悉,特别在工期紧任务重的情况下,选撸起来快的准没错。
自检更新
主框架启动时会从远程更新服务器上获取版本,主要包括两个版本信息:
- 主框架版本:如果有升级,则提示用户需要从指定位置手动下载安装包
- 内核版本:如果有升级,则自动从指定位置下载内核二进制
Electron 内建有热更新机制,但不支持 Linux(虽然目前 BND2 也没支持 Linux,但未来会考虑支持),并且我们有自己的产品版本管理机制,所以就没有考虑使用 Electron 内建的热更新了。
另外,无论给 Windows 还是 Mac 的升级包都是使用 zip 包,主要是为了统一。但 zip 包不会保留可执行权限,Linux/Mac 解压后需要再给二进制赋一下可执行权限。
账号登录
为了“复用”登录,我们是通过 webview 直接引的待登录站点的 web 登录界面。没有在本地做登录框主要是考虑到:登录逻辑复杂,特别是登录异常处理。比如二维码、验证码、短信校验等等,这些如果通过后端对接非常繁琐,外部站点改一下实现就要跟着变,维护工作量巨大。
登录后我们只需要获取一下关键的 cookie 就行了,然后把这个 cookie 传给内核,后续由内核负责和外部站点的接口进行交互。
webview
通过 webview 从 CDN 加载,如果要升级只需要编译并发布 CDN。
每次启动加载的 HTML 是通过在客户端加入 ?时间戳
来引入,也就是说这个文件肯定不会在 CDN 上命中,都是回源加载最新的,CDN 主要是加速其引入的其他资源文件。
前后端交互
UI 和内核的交互没有通过传统的 HTTP AJAX 实现,而是统一通过 WebSocket 来实现全双工的异步通讯。这样设计主要是考虑到 BND2 在异步推送的场景比较多,比如全局统计、下载进度统计、反馈内核报错等。
实现上我们做了一个简单的抽象封装,通过命令模式实现指令分发和执行:
// WebSocket 消息处理 m.HandleMessage(func(s *melody.Session, msg []byte) { request := map[string]interface{}{} json.Unmarshal(msg, &request) // 反序列表指令 cmdStr := request["cmd"].(string) cmd := command.Commands[cmdStr] // 指令路由分发 param := request["param"].(map[string]interface{}) go cmd.Exec(param) // 异步执行 }
前端也非常类似,在 ws.onmessage
时分发并执行指令。
安全性
桌面软件容易被破解主要是因为整个运行时都是在客户机上,破解者想怎么调试都可以。
比如破解者可以通过网络抓包对关键的请求接口进行修改,从而影响后续的执行逻辑,这一点可以通过加密请求响应数据来 稍微 加大破解难度。再比如,破解者可以通过反汇编调试,找到并修改关键变量来跳过某些判断检查,这一点可以通过加壳来 稍微 加大破解难度。
总之,没有绝对的安全,防君子不防小人。
总结
本文主要描述了一种现代富客户端技术架构的实现思路,以 BND2 为实例验证了该思路的可行性。
更进一步,我们可以考虑通过一致性状态分布协议(比如区块链、IPFS)尝试数据存储的分布,从而实现真正意义上的富客户端。这里只是提个引子,之后有新会更。
以上所述就是小编给大家介绍的《百度不限速下载器 BND2 技术架构简介》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 关于nginx的限速模块
- Android下载器之限速篇
- 如何用Redis实现一个指定时间的限速器
- 百度网盘不限速下载 Chrome 插件 1.1.0 兼容苹果系统
- 微服务之服务治理:Envoy 全局 gRPC 限速服务 lyft/ratelimit 详解
- nft-qos 更新至 v1.2,修复外网上传速率限速失效的问题
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
多任务下的数据结构与算法
周伟明 / 华中科技 / 2006-4 / 58.00元
本书和传统同类书籍的区别是除了介绍基本的数据结构容器如栈、队列、链表、树、二叉树、红黑树、AVL树和图之外,引进了多任务;还介绍了将任意数据结构容器变成支持多任务的方法;另外,还增加了复合数据结构和动态数据结构等新内容的介绍。在复合数据结构中不仅介绍了哈希链表、哈希红黑树、哈希AVL树等容器,还介绍了复合数据结构的通用设计方法;在动态数据结构中主要介绍了动态环形队列、动态等尺寸内存管理算法。在内存......一起来看看 《多任务下的数据结构与算法》 这本书的介绍吧!