
【軟件介紹】
pan-light是一款非常好用的第三方百度網(wǎng)盤客戶端軟件,它為用戶真正實現(xiàn)了百度網(wǎng)盤的不限速下載,它通過同時發(fā)起多個http請求,以及借用會員賬號的方式,幫助用戶突破百度網(wǎng)盤的下載速度限制,讓用戶能夠用最快的速度下載自己需要的資源,感興趣的用戶快來下載吧。pan-light除了強大的下載功能之外,還擁有在線播放視頻的功能,方便用戶在線觀看自己喜歡的視頻資源。它的界面十分清爽簡潔,而且功能也是完全免費的,是一個很不錯的百度網(wǎng)盤下載軟件。

【panlight百度網(wǎng)盤不限速軟件功能】
極簡主義多賬號登錄,自由切換
布局清晰,暢快操作
快捷導(dǎo)航,深層路徑一點即達(dá)
高并發(fā)下載,快如閃電
跑滿帶寬,酣暢淋漓
斷點續(xù)傳,想下就下想停就停
速度控制,下載上網(wǎng)兩不誤
資源廣場
突破百度版權(quán)限制,分享暢通無阻
分享時長設(shè)置,手快有,手慢無
優(yōu)質(zhì)資源,官方認(rèn)證,安全放心
在線播放器
在線點播,播完不留痕
高清觀影,給心靈放個假
倍速播放,追劇步伐跟得上

【panlight百度網(wǎng)盤不限速軟件特性】
利用golang輕量級協(xié)程,高并發(fā)分段下載,可通過調(diào)節(jié)并發(fā)數(shù)達(dá)到最佳下載速度;下載進(jìn)度狀態(tài)數(shù)據(jù)持久化到磁盤,實現(xiàn)軟件重啟后可斷點續(xù)傳;客戶端本地實現(xiàn)簡單代理,突破百度防盜鏈,將網(wǎng)盤視頻喂給qt視頻播放組件,從而在線播放視頻
在線體驗:用戶無需下載,通過網(wǎng)頁即可在線體驗本軟件部分功能;該系統(tǒng)可應(yīng)用于其他客戶端產(chǎn)品的在線體驗;
在線體驗原理:閑置的個人pc,通過docker開啟若干個'虛擬機',虛擬機內(nèi)安裝好了本軟件以及vnc服務(wù)。用戶打開網(wǎng)頁,在服務(wù)端的調(diào)度下,網(wǎng)頁通過webrtc和閑置pc建立p2p連接。閑置pc將會打通一條用戶網(wǎng)頁到docker內(nèi)部'隧道,網(wǎng)頁連接虛擬機vnc服務(wù)進(jìn)行遠(yuǎn)程控制

【panlight百度網(wǎng)盤不限速軟件說明】
1、pan-light是一款不限速的百度網(wǎng)盤客戶端,基于golang+Qt5開發(fā).本項意義在于探究golang在圖形界面客戶端;web服務(wù)端;事件調(diào)度,websocket,p2p長連接等方面的應(yīng)用和實踐.歡迎廣大golang開發(fā)者參與本項目.2、環(huán)境搭建
本項目需要以下開發(fā)環(huán)境
golang1.12主要編程語言
qt5實現(xiàn)界面顯示
protobuf實現(xiàn)數(shù)據(jù)序列化
docker實現(xiàn)在線演示'虛擬機'
3、設(shè)計思路-客戶端部分
之前嘗試過electron寫界面,不過他打出來的包太大了,而且和go需要用websocket通信,這樣所有頁面對go的調(diào)用都是異步的,寫起來不太爽.偶然發(fā)現(xiàn)qml這個東西,發(fā)現(xiàn)很適合做界面,也是JavaScript語法,而且沒有electron的這些缺陷.所以最后決定用go+qml開發(fā).go處理所有業(yè)務(wù)邏輯,qml負(fù)責(zé)顯示邏輯.
ui,邏輯分離:
為了保持項目的整潔性,不希望go的邏輯強耦合于qml,所以決定qml對于go的調(diào)用都通過rpc的方式來實現(xiàn).這樣做帶來的好處是,可以方便的更換ui側(cè)技術(shù)棧.比如說不用qml而是用qtwidget來渲染界面;甚至可以用系統(tǒng)原生接口來展示界面.
實現(xiàn)rpc:
rpc是什么?就是一方需要調(diào)用不在同一個代碼執(zhí)行環(huán)境的另一方的函數(shù),并得到返回值.既然不在同一執(zhí)行環(huán)境,那么函數(shù)的參數(shù)和返回值就不能直接通過內(nèi)存來傳遞.而是需要通過某種跨執(zhí)行環(huán)境的方式將參數(shù)傳遞過去,在常見的場景下面都是通過網(wǎng)絡(luò)來傳遞,比如大型項目常用的微服務(wù)架構(gòu)通過http或者消息隊列傳遞數(shù)據(jù)實現(xiàn)rpc.但是我們這里并不打算通過網(wǎng)絡(luò)來實現(xiàn),剛說過了通過網(wǎng)絡(luò)只能走異步調(diào)用,因為js是單線程的,不能在網(wǎng)絡(luò)io這阻塞,否則界面會卡頓.
實現(xiàn)rpc就要實現(xiàn)qml和go之間的通信.通過查閱qt文檔和資料,我發(fā)現(xiàn)qml支持原生組件.什么是原生組件?通常的組件外觀是由符合qml語法結(jié)構(gòu)類json代碼實現(xiàn)的,并通過js來改變組件屬性來控制界面變化.而原生組件是由c++類來實現(xiàn),通過c++代碼來畫出需要渲染的外觀并處理相應(yīng)的事件.原生組件可以導(dǎo)入到qml文件供非原生組件使用,并且qml可以調(diào)用原生組件的方法.這樣就實現(xiàn)了qml和c++之間的數(shù)據(jù)傳遞.由于go是支持和c混編的,所以我們可以通過c++中間代碼,來讓qml的調(diào)用都通過c++轉(zhuǎn)到go來,讓go來處理真正的邏輯.聽起來很麻煩?別擔(dān)心,已經(jīng)有優(yōu)秀的第三方包來實現(xiàn)自動生成c++中間代碼.所以我們只管用go的結(jié)構(gòu)體代替c++的類.開發(fā)中完全不需要進(jìn)行c++編程.所以你可以不會c++.
qml到go的通信問題解決了.為了減少耦合,我們只用go實現(xiàn)一個原生組件,并把這個原生組件引入到qml.這里你需要了解2個概念:slot和signal.你可以百度搜索"qtslotsignal"關(guān)鍵字,了解是什么就可以啦.slot可以讓一個組件調(diào)用另外一個組件的方法并獲取返回值.signal讓A組件可以發(fā)送事件(數(shù)據(jù))給B組件,而且不只有B組件可以監(jiān)聽這個事件,其他組件也可以監(jiān)聽.我們在原生組件中定義一個goMessagesignal,并在qml中監(jiān)聽這個信號,這樣go隨時可以通過goMessage來發(fā)送消息給qml,比如下載任務(wù)的進(jìn)度,速度等信息.然后再定義一個callGoAsyncsignal,來實現(xiàn)qml異步調(diào)用go:qml組件將需要調(diào)用的函數(shù)名稱,參數(shù),以及本次調(diào)用的唯一id,通過json序列化之后觸發(fā)callGoAsync信號.原生組件收到這個信號,開啟一個協(xié)程解析出調(diào)用函數(shù)名和參數(shù),然后調(diào)用真正的go實現(xiàn),得到結(jié)果之后在觸發(fā)goMessage把結(jié)果和調(diào)用id發(fā)到qml,qml里通過調(diào)用id的找到異步調(diào)用發(fā)起的回調(diào)函數(shù),把結(jié)果通過回調(diào)函數(shù)發(fā)給調(diào)用者.
至于同步調(diào)用我們在go原生組件中定義一個callGoSync的slot,處理方式和異步調(diào)用類似,只是不會開啟新的協(xié)程處理調(diào)用邏輯.這樣qml調(diào)用的地方會阻塞并等待結(jié)果.所以對于同步調(diào)用的go函數(shù)處理過程中不能進(jìn)行網(wǎng)絡(luò)io,以免阻塞ui
并發(fā)下載:
對于非會員,百度是有速度的限制的.一開始我以為和視頻網(wǎng)站的vip專供視頻一樣,百度的不限速下載地址也可以通過調(diào)用接口時改變參數(shù)來得到.但是經(jīng)過我的分析發(fā)現(xiàn),會員和非會員都是調(diào)用相同的接口,傳的相同的參數(shù).百度服務(wù)端根據(jù)你是否是會員來決定返回是否限速的鏈接,所以非會員沒有辦法獲取不限速鏈接.不過幸運的是,所謂的限速是針對一個http連接的.如果你向這個下載地址同時發(fā)起2個http請求,你會發(fā)現(xiàn)他們速度限制是分離的,單個連接的速度不會因為連接數(shù)的增多而降低.所以我們可以通過同時發(fā)起多個http請求來提高總的下載速度,比如同時發(fā)起100個請求,那么理論上你能獲得大于限制速度100倍的最大速度.當(dāng)然并發(fā)請求是不能一樣的,不然100個請求下載下來的內(nèi)容都是一樣的,這樣沒有意義.所以我們應(yīng)該把整個下載任務(wù)進(jìn)行分段,每個請求通過改變http的range頭部負(fù)責(zé)一段不同的下載,然后通過fseek把下載的內(nèi)容寫入到本地文件的不同位置.那么問題來了,并發(fā)連接數(shù)是不是越大越好呢?不是的,當(dāng)百度檢測到你的并發(fā)很高會直接拒絕你的請求,甚至有可能對你的賬號拉入黑名單.經(jīng)過我的測試,通過調(diào)節(jié)并發(fā)數(shù),非會員速度最大一般可以達(dá)到6~8MB/s.相比使用百度官方的客戶端,這對于非會員來說已經(jīng)很不錯了
獲取不限速鏈接:
辦了200M的寬帶,理論上有最大25MB/s的下載速度,這才8M,還不夠快呀!
提升并發(fā)數(shù)已經(jīng)沒法提升下載速度呢,只能從限速這想辦法.那非會員有沒有辦法獲取到不限速鏈接呢?我想到一個辦法,'借用'會員賬號獲取不限速下載鏈接.如果能拿到不限速鏈接,再加上并發(fā)下載,那速度得飛起.來張圖感受一下,這是我去年在上家公司測試的時候的網(wǎng)速.speed
這還是當(dāng)時用php寫的腳本簡單實現(xiàn)的:https://www.jianshu.com/p/1777b2f02655,要達(dá)到這個速度光有帶寬還不行哦,你還得有好的固態(tài)硬盤.不然磁盤速度都跟不上網(wǎng)速.不過可惜的是,我后來測試幾次都達(dá)不到當(dāng)時的網(wǎng)速,不知道是因為帶寬不夠還是百度調(diào)整了策略.
Anyway,不限速鏈接配并發(fā)20M的速度是沒問題的.如何借用vip賬號?因為每個賬號都只能獲取自己網(wǎng)盤里面的下載鏈接,或者是別人分享的文件的鏈接,所以,我一開始的想法是客戶端非會員創(chuàng)建分享鏈接分享要下載的文件,并把鏈接發(fā)送到我的服務(wù)器,我的服務(wù)器登錄了幾個會員賬號,會員賬號通過分享鏈接解析出不限速鏈接之后在返回給客戶端,客戶端非會員拿到這個鏈接進(jìn)行下載.這樣做有什么弊端呢?我們知道對于一些文件,比如熱門影視資源,你是無法創(chuàng)建分享的,這是百度的版權(quán)保護.所以這種方法沒辦法下載有版權(quán)保護的文件.然后我把目光鎖定到了百度的極速上傳接口.什么是極速上傳?百度網(wǎng)盤用戶眾多,每個用戶都有幾千個G的文件,但我們知道,其中有很多文件都是重復(fù)的,比如某個電影,用戶A存了,用戶B也存了.百度當(dāng)然不可能存2分了,他只會存一份.當(dāng)你也上傳這個文件的時候,他還是只會存一份,只是在你的賬號下面創(chuàng)建一條記錄,代表你擁有這個文件.所以當(dāng)你上傳這個電影文件時,真實的上傳是被浪費掉的.所以百度提供了一個極速秒傳的接口,在上傳之前先提交文件的md5值和文件前255kb內(nèi)容的文件的md5值.百度拿這2個md5值取它的數(shù)據(jù)庫找,如果找到了,那就不用再上傳了,直接在你的賬號下添加一條你擁有這個文件的記錄.這就是所謂的秒傳.利用這個接口,我們只要知道一個文件的md5值和前255k數(shù)據(jù)的md5值就可以直接copy其他用戶網(wǎng)盤中的文件到自己網(wǎng)盤中.所以我們可以把非會員的文件copy到會員賬號下,來獲取不限速鏈接.md5值怎么來呢,很巧不需要下載整個文件就能獲取到,非會員獲取到限速鏈接,拿去請求下載時百度返回的http響應(yīng)頭部有一個content-md5的header.然后對于前255k的md5值完全可以下載這255k的內(nèi)容,然后在客戶端計算出來.至此問題解決.
資源廣場:
資源分享同理,利用極速上傳接口.服務(wù)端只需要保存2個md5值,其他用戶要轉(zhuǎn)存資源廣場里的文件時,拿這2個md5值請求極速上傳接口就可以實現(xiàn)轉(zhuǎn)存了.
【panlight百度網(wǎng)盤不限速軟件使用方法】
1、從起點軟件園下載壓縮包,解壓并打開
2、本軟件不需要安裝,直接打開exe程序即可運行

3、進(jìn)入到軟件里之后,需要選擇登陸方式,可以選擇任意一種

4、登陸進(jìn)去之后,就可以看到網(wǎng)盤里文件

5、選擇其中一個資源進(jìn)行下載,選擇下載方式


































