Membangun BitTorrent Versi Anda Sendiri
(app.codecrafters.io)- Tantangan BitTorrent dari CodeCrafters membahas proses mengimplementasikan langsung protokol berbagi file P2P dan mengunduh file yang tersedia secara publik
- Alur pembelajaran dimulai dari decoding bencode, lalu berlanjut ke parsing file
.torrent, menghitung info hash, menemukan peer, handshake, dan mengunduh potongan file - Terdiri dari total 19 tahap, gabungan 11 tahap BitTorrent dasar dan 8 tahap Magnet Links
- Struktur tahap dan panduan dapat dilihat gratis, tetapi pengiriman kode dan melihat solusi memerlukan CodeCrafters Membership
- Jika ingin mencoba gratis terlebih dahulu, Anda bisa memilih tantangan gratis bulan ini, Build your own Shell
Tujuan implementasi klien BitTorrent
- Build your own BitTorrent adalah tantangan CodeCrafters yang memandang BitTorrent sebagai protokol berbagi file P2P untuk distribusi data skala besar dan mengajak Anda mengimplementasikannya sendiri
- Tujuan akhirnya adalah membuat klien BitTorrent yang dapat mengunduh file yang tersedia secara publik menggunakan protokol BitTorrent
- Selama prosesnya, Anda juga akan mempelajari cara kerja protokol BitTorrent dan file
.torrent
Susunan tahap dan tingkat kesulitan
-
Tahap BitTorrent dasar
- Implementasi dilakukan secara berurutan, mulai dari decoding bencode, pemrosesan file torrent, koneksi peer, hingga pengunduhan file
- Decode bencoded strings: Sangat mudah
- Decode bencoded integers: Mudah
- Decode bencoded lists: Mudah
- Decode bencoded dictionaries: Mudah
- Parse torrent file: Mudah
- Calculate info hash: Menengah
- Piece hashes: Mudah
- Discover peers: Menengah
- Peer handshake: Menengah
- Download a piece: Sulit
- Download the whole file: Sulit
-
Tahap Magnet Links
- Mencakup parsing magnet link, extension handshake, pertukaran metadata, hingga pengunduhan potongan dan seluruh file
- Parse magnet link: Mudah
- Announce extension support: Mudah
- Send extension handshake: Mudah
- Receive extension handshake: Mudah
- Request metadata: Mudah
- Receive metadata: Mudah
- Download a piece: Sulit
- Download the whole file: Sulit
Ketentuan penggunaan
- Tantangan ini memerlukan CodeCrafters Membership
- Seluruh struktur tantangan dan panduan tahap dapat dipelajari secara gratis
- Pengiriman kode dan melihat solusi memerlukan membership
- Jika menginginkan tantangan gratis, Anda bisa mencoba Build your own Shell yang tersedia gratis bulan ini
1 komentar
Pendapat Hacker News
Halo! Saya Sarp, pembuat tantangan Build your own BitTorrent dari Codecrafters
Sedikit latar belakang: setelah di-PHK dari pekerjaan di FAANG, saya hampir tidak punya motivasi untuk kembali, lalu mulai mencari proyek pemrograman yang menarik untuk menghidupkan lagi minat saya pada coding
Saat menjalani hidup sebagai digital nomad, saya menemukan Codecrafters di Nomadlist, dan saya suka cara kerjanya: push kode ke Git untuk melewati pengujian tahap demi tahap. Alur progres yang digamifikasi membantu saya fokus, dan saya bisa menggali lebih dalam software yang biasa saya pakai seperti SQLite, Git, dan Redis. Saya juga belajar Go dari nol untuk mengerjakan tantangannya
Setelah menyelesaikan semua tantangan di situs dan tidak ada lagi yang bisa dikerjakan, saya memutuskan membuat salah satu ide yang banyak mendapat suara, yaitu klien BitTorrent
Saat membuat klien BitTorrent, saya belajar banyak hal: protokol BitTorrent, struktur file torrent, masalah encoding, pipelining request jaringan, URL encoding untuk nilai biner, penggunaan channel di Go, dan lain-lain
Saya ingin mendapat masukan tentang tantangan ini, dan dengan senang hati menjawab pertanyaan
Menarik melihat ini muncul, dan mungkin bisa membantu saya melanjutkan proyek
Cargo.tomlSaya ingin mencoba menyelesaikan sebagian tantangan bencode dengan nom; mungkin itu pilihan yang berlebihan, tetapi saya ingin melakukannya untuk bersenang-senang, dan saat ini tidak bisa
Kalau kekhawatirannya adalah beban builder jarak jauh atau waktu eksekusi, akan bagus jika ada cara untuk menjalankan test case secara lokal agar masalah ini bisa dihindari
Jon Gjengset[1] saat ini sedang live coding dalam Rust untuk tantangan yang sama di kanal YT-nya[2]
[1]: https://thesquareplanet.com/
[2]: https://www.youtube.com/watch?v=jSTkEPPiULs
Tautan yang lebih baik adalah https://www.youtube.com/watch?v=jf_ddGnum_4, sudah ada penanda chapter dan bagian mati listrik di tengah juga sudah dipotong :p
[0] https://www.twitch.tv/videos/1954769913
Saya tidak mengerti kenapa harus login. Apakah ini tutorial berbayar?
Tutorial gratis ada di sini
JS - https://allenkim67.github.io/programming/2016/05/04/how-to-m...
GO - https://blog.jse.li/posts/torrent/
Python - https://markuseliasson.se/article/bittorrent-in-python/
https://github.com/codecrafters-io/build-your-own-x
Kenapa mereka meminta hak akses ke akun GitHub saya tanpa penjelasan apa pun?
Meski begitu, mereka tetap harus menjelaskan kenapa itu diperlukan
Anehnya, bagian upload tidak ada. Kalau memang peer, berarti peserta yang setara, jadi data seharusnya mengalir dua arah. Kalau tidak, BitTorrent tidak akan berfungsi
Fitur upload rencananya akan ditambahkan sebagai perluasan tantangan, dan ini salah satu ide perluasan yang mendapat banyak suara dari komunitas
Saat ini belum didukung, tetapi akan segera tersedia, dan perluasan baru ditambahkan berdasarkan voting pengguna
Kalau Anda memakai JavaScript, ada WebTorrent buatan Feross, yang membawa protokol ini ke dalam tab browser
Codebase-nya sangat enak dibaca. Banyak developer lebih mahir menulis kode daripada membacanya, dan kalau ingin melatih kemampuan membaca kode, saya jarang melihat tempat yang lebih baik untuk memulai daripada codebase WebTorrent. Dari sisi keseruan membaca, saya menempatkannya setara dengan redis
https://github.com/webtorrent/webtorrent
Saya sangat suka ide ini! Dulu saya ingin belajar Erlang, sementara teman saya ingin belajar Crystal, jadi kami memutuskan untuk mencoba membuat klien yang sepenuhnya kustom agar bisa saling berbagi file
Rasanya sangat menyenangkan ketika kami akhirnya bisa mengirim dan menerima file dengan protokol dasar dan beberapa ekstensi. Benarkah ekstensi-ekstensi itu disebut BEP?
Ini mungkin cara favorit saya untuk mempelajari bahasa baru, karena cukup sederhana untuk dipahami dan diimplementasikan
Seiring tahun berganti, makin sedikit ide proyek kecil yang membuat saya bersemangat, dan ini salah satunya
Saya baru pertama kali mendengar CodeCrafters, tetapi saya suka ide tantangan akademis seperti membuat database. Akan bagus juga kalau ada membuat compiler
https://twitter.com/codecraftersio/status/168850373608654028...
Saya teringat tulisan tentang membuat klien BitTorrent dengan Go: https://blog.jse.li/posts/torrent/
Beberapa tahun lalu di tempat kerja sebelumnya, kami membuat dan mendukung Linux live OS kustom yang bisa dipakai karyawan di netbook murah
Untuk distribusi update, kami membuat sendiri server torrent internal dari nol, dan menggunakannya untuk mendistribusikan update image
Itu salah satu pengalaman pertama saya membuat software yang mengikuti standar dan bisa bekerja dengan klien-klien standar, jadi menjadi proses belajar yang bagus