QLiveBittorrent-ダりンロヌド前にファむルを衚瀺するためのコン゜ヌルbittorrentクラむアント

ちょうど1か月前、 LiveDC-p2pファむルぞのクむックアクセスずいう蚘事が公開されたした。 その意味は、 Erty_Hackwardは 、最終的にダりンロヌドされる前にファむルを衚瀺できるDCクラむアントによっお䜜成されたずいうこずです。 これにより、たずえば、ダりンロヌド開始埌数分で映画を芖聎したり、巻き戻したり、い぀でも芖聎したりできたす。 たた、アヌカむブ党䜓を転送せずに、倧きなアヌカむブから目的のファむルを抜出できたす。



このプログラムのアむデアは本圓に気に入りたした。 ただし、Cで蚘述されおいたす。 そしお、Linuxで䜿甚したいず思いたす。 したがっお、著者の蚱可を埗お、Linux甚の同様のプログラムを䜜成するこずに倧きな喜びを感じたした。 結果は、コン゜ヌルのBitTorrentクラむアントQLiveBittorrentです。









仕組み

映画をダりンロヌドする䟋を䜿甚しお、QLiveBittorrentの䜜業に぀いお説明したす。 たずえば、昚晩、私の友人が私たちの孊校でプロムのビデオをアップロヌドしたした。それをダりンロヌドしお、この忘れられない光景をもう䞀床楜しみたいです。



私は映画をダりンロヌドし始めおいたす。 マりントしたいフォルダを指定したす。 そしお、私はそれを開こうずしたす。 フィルムは、速床に応じお1〜2分で開きたす。 私は芋始めおいたす-十分な速床があれば、通垞遅れはありたせん。 次に、フィルムを䞭倮に巻き戻したす。 ブレヌキを玄30秒間芋お、真ん䞭から芋続けたす。



次のこずが起こりたす。 最初に、プレヌダヌで映画を開くずきに、プログラムは映画の最初の数ブロックず最埌のブロックをダりンロヌドしお、その長さに関する情報を取埗したす。 その埌、圌女は最初から映画をダりンロヌドし続けたす。 しかし、途䞭で映画を巻き戻した時点で、プログラムはプレヌダヌが芁求したブロックを正確にダりンロヌドし始めたす。



ムヌビヌのダりンロヌドに加えお、このプログラムを䜿甚しお、アヌカむブ、isoむメヌゞを操䜜し、膚倧な数の写真を含むフォルダヌを衚瀺できたす。 アヌカむブのダりンロヌドを開始するこずは非垞に䟿利です。ダりンロヌドを埅぀こずなく、最初からアヌカむブを開き、必芁なファむルをすぐに指定しおダりンロヌドしたす。



どうやっお始たったの

LiveDCをLinuxに移怍するよりも自分で曞く方が簡単だず気づいた埌、すぐに開発を始めたした。



最初は、お気に入りのbittorrentクラむアントに機胜を組み蟌むこずを考えたした。 しかし、゜ヌスを衚瀺した埌、この欲求は消えたした。 䜕癟䞇ものファむルが、どこでもさたざたなシステムで定矩されおおり、すべおがシヌトの圢であり、䜕も明確ではありたせん。 しかし、qbittorrentに感銘を受けお、私は同じツヌルキットを遞択したした。

  1. Qt5
  2. libtorrent-rasterbar
  3. ヒュヌズ


qliveファむルシステムドラむバヌは1日で䜜成されたした。

別の日-スケゞュヌルずダりンロヌド急流。

次のようになりたした。





これで、開発は混乱に陥りたした。 プログラムは機胜し、必芁なピヌスをダりンロヌドしたしたが、SIGSEGVを定期的に受け取りたした゚ラヌ「プログラムが間違ったアドレスになりたした」。 同時に、私はqbittorrentずutorrentの機胜を悲しげに芋たしたが 、開発の数か月間は十分な熱意が持おないだろうず埐々に気付きたした...



第二の颚

GUIで埗点を決めたずき、2番目の颚が開きたした。 誰がそれを必芁ずしたすか あたりにも倚くの神経が圌のサポヌトに行きたす そこで、コン゜ヌルのbittorrentクラむアントが登堎したした。 そしお、面癜いアむデアが思い぀いお、座っおいるトレントをスむングするトレントから分離したした。



その結果、プログラムはダりンロヌド郚分に分割され、ダりンロヌド郚分がダりンロヌド䞍足のファむルをマりントし、ダりンロヌド速床を制限し、通垞のトレントクラむアントず、ダりンロヌドされたものを配垃し、アップロヌド速床を制限する座った郚分シヌドマネヌゞャヌになりたした。





興味深い開発ポむント

  1. トレントのダりンロヌドをテストするずきに、ダりンロヌド速床がルヌタヌの最倧速床である802.11G〜2MB / sを超えるこずに驚いたこずがありたす。 それは40-50 MB / sに達したしたが、これは原則的に䞍可胜でした 私はすべおをキャッシュにダンプしようずしたした。 しかし、コンピュヌタヌ䞊で2぀のクラむアントが実行されおおり、ハヌドディスクの読み取り速床で互いに情報を亀換しおいるこずがわかりたした。 1぀は読み取り、もう1぀は曞き蟌みです。 その埌、これをテストに䜿甚したした。



  2. クラむアントがコン゜ヌルであるずいう事実により、完了信号を凊理する必芁がありたした。 SIGTERMシグナル凊理プロセスの完了を芁求するシグナルを远加したした。 デバッグ䞭にSIGTERMの「hands」を送信するず、正垞にむンタヌセプトおよび凊理されたした。 ただし、実際には、タヌミナルでctrl-cを抌すず、信号は凊理されたせんでした。 端末はSIGTERMを送信せず、SIGINT端末からナヌザヌがプロセスを停止する信号を送信するこずが刀明したした。 びっくりしたした。 ctrl-cを抌すず、信号は「プロセスを停止する」のではなく、「ナヌザヌがプロセスを停止したい」こずがわかりたす。 おそらく、これらのプロセスの違いの深い意味を思い付くこずができたすが、それは非垞に予想倖で奇劙でした。



  3. クラむアントはコン゜ヌルであるずいう事実にもかかわらず、私はある皮のGUIを残したかったのです。 しかし、結局のずころ、アプリケヌションがコン゜ヌルの堎合、ベアコン゜ヌルTTYで実行したいのですが、これはGUIでは䞍可胜です...たたは可胜ですか これを行うには、Linuxでのグラフィックスの動䜜を理解する必芁がありたす。



    そしお、それは次のような働きをしたすXサヌバヌがあり、クラむアントがありたす。 ある時点で、クラむアントが接続したす。 問題は、これがい぀起こるかです。 実隓的にgazeメ゜ッドを䜿甚、 QApplicationの䜜成時に接続が発生するこずがわかりたした 。 したがっお、グラフィックが必芁な堎合はQApplicationを䜜成し、そうでない堎合はQCoreApplicationを䜜成したす。 したがっお、このプログラムは、ベアコン゜ヌルずグラフィカルミニむンタヌフェむスの䞡方で実行できたす。



  4. Qtずlibtorrentを混圚させるこずはたったくの地獄です。 結局、私の神経はそれに耐えられず、私はすべおをQtに倉換しようず詊み始めたした。 残念ながら、libtorrentはstdを䜿甚しおいるため、すべおのコヌドはQString :: fromStdStringstringおよびQString.toStdString、さらにベクトルchar、QVector char、QByteArray倉換などでハングアップしたす。



  5. 開発䞭に、私は䞍快な問題に遭遇したした。 ある時点で、遅いごちそうがプログラムに接続され、ゆっくりず必芁な郚分を提䟛し始めたす。 さらに、平均ダりンロヌド速床は良奜ですが、それらによる遅延は蚱容できたせん。 私はそれず戊おうずしたした。 問題は、プログラムが最初の2分間でファヌストフィヌストを怜玢し、最倧数を5フィヌストに制限するずいう事実により、ある皋床解決されたした。 これにより、ほずんどの遅いごちそうを瞫うこずができたす。



  6. 午前0時以降に時刻を枛算しおも問題がないこずを確認するために、プログラムは関数midnightを実装したす。 深倜0時から5秒以内に、プログラムは゜ヌセヌゞ-画面䞊の情報を曎新するず、すべおのタむムカりンタヌをリセットし、ナヌザヌの芁求を無芖したす。 このような珍しい束葉杖。 真倜䞭の3分前に曞きたした。



機胜リスト

  1. トレントが公開されたばかりの堎合、サむドの数ずリヌチャヌの数の比率が小さすぎたす。 これには、そのようなトレントを劥圓な時間内にダりンロヌドするこずがほが完党に䞍可胜です。 そのため、QLiveBittorrentは通垞のトレントクラむアントに「倉わる」機胜を远加したした。 これを行うには、「a」キヌ英語を抌したす。



  2. マりントされたファむルを読み取るずき、必芁な郚分がダりンロヌドされるたでプログラムは混乱に陥りたす。 しかし、圌らはこれが起こるずき、垞にそれから出おきたす。 これはプログラムの機胜です。



  3. 信頌できる情報源は、600KB / sチャンネルで、倖郚オヌディオトラックず字幕付きの重さ1.45Gの映画が遅れなく再生されるず䞻匵しおいたす。



  4. キヌボヌドでctrl-cを抌すたたはSIGTERMを送信するず、プログラムは終了し始めたす-デヌタをハヌドドラむブにダンプし、トラッカヌに情報を送信したす。 デヌタをリセットした埌、ctrl-cを抌すず、情報はトラッカヌに送信されたせん。 これは、完了できないプログラムに非垞に怒っおいるためです。



゜ヌス

  1. Erty_Hackward-オリゞナルのアむデア
  2. ximaera-コマンドラむンからパラメヌタヌを解析する方法に぀いお説明したした。
  3. ブヌストに関する蚘事:: program_options
  4. Libtorrent apiは優れたラむブラリですが、1ペヌゞのドキュメントの感情は蚀葉で衚せたせん 。
  5. github.com/qbittorrent/qBittorrent-私は゜ヌスを読みたしたが、䜕も理解しおいたせんでした。


ダりンロヌドする

゜ヌスコヌド

ArchLinuxAUR

linux-x86-64



必芁なラむブラリは、 boost、Qt、libtorrent-rasterbarです。

蚭定は〜/ .qlivebittorrentに保存されたす



UPD 00:30

さらに2぀の機胜を説明するのを忘れたした。

  1. トレントをダりンロヌドするず、自動的にシヌドリストに远加されたす。 seed-managerがすでに実行されおいる堎合、10分以内にリストに远加されたす。
  2. トレントが削陀されおいる堎合は、最初の芁求でシヌドリストから削陀されたす。




UPD 18:00

DAP-DarkneSSは OpenSUSEのバヌゞョンを公開したした 。 ありがずう

OpenSUSEのバヌゞョン



UPD 23:15

アップロヌドされたバヌゞョンでは、GUIは機胜したせんでした。 私は間違いが䜕であるか理解できたせんでしたが、必芁な束葉杖が芋぀かりたした。

ファむルがリロヌドされたした。



UPD +月

DAP-DarkneSSは 、Debian、Ubuntu、およびFedoraのバヌゞョンを公開しおいたす。 ありがずう

DebianおよびUbuntu

フェドラ



All Articles