問題タブ [peer-wire-protocol]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java で実装されている Bittorrent ピア ワイヤ プロトコル
Bittorrent Peer Wire Protocol に関していくつか質問があります。この仕様を使用して Java で実装しようとしています。
Peer Wire Protocol セクションでは、すべての整数は 4 バイトのビッグ エンディアン値であると書かれています。私の知る限り、Javaはビッグエンディアンを使用しています。チョークメッセージを送信したい場合は、ということですか
チョーク:<len=0001><id=0>
sokcet 1 の後に 0 を書き込むだけですか?
私の2番目の質問について。作品をリクエストするとき、複数のファイルを 1 つの大きな連続したファイルと見なしますか? または個々のファイルで考えますか?ピースの長さがファイルと一致しないため、1 つのインデックスに 1 つのファイルの終わりと別のファイルの始まりの両方を含めることができますか?
ピアへの接続を開いてハンドシェイクを送信するときの最後の質問については、ピースをリクエストし続けるか、リクエストしてからしばらく待ってから、何かをリクエストするかどうかを確認しますか? 話はどのように行われますか?私は主にhttpタイプのネットワークプログラミングを行っており、何かを要求して応答を待ちます。しかし、作品をリクエストし続けたら、どのように作品を送るのですか?
java - Java スレッドのパフォーマンス
私はbittorrentクライアントに取り組んでいます。ピアと通信している間、私が彼らと通信する最も簡単な方法は、ピアごとに新しいスレッドを生成することです。しかし、ユーザーが多数のピアとの接続を維持したい場合は、多くのスレッドを生成する必要があります。
私が考えた別の解決策は、1 つのスレッドを使用してピア オブジェクトを反復処理し、それらを一定期間実行することです。
私は主にルビーで他のライブラリをチェックしました(私のものは Java です)、それらは新しいピアごとに1つのスレッドを生成します。ユーザーが接続数を 100 や 200 などの高い数に設定した場合、1 つのスレッドを生成するとパフォーマンスが低下すると思いますか?
algorithm - 最速のBitTorrentピア接続を決定する
接続しているピアの接続(アップロードレート)が最も速いかどうかをどのように判断しますか?
ピアの実際の接続が最速の人を支配しますか、それとも最も多くのチャンクを必要とするピアが、ダウンロードする人が少なくなるにつれて、彼が最速でアップロードするようにしますか?
トラッカーから返されたピアリスト内のすべてのピアを取得し、pingを使用して応答のタイミングを調整するなどの方法で、どのピアが近いかを判断するアルゴリズムを作成したいと思います。
ありがとう
sockets - ピア ワイヤ プロトコル - 長さ 255 および ID 255 のメッセージ
BitTorrent ピア ワイヤ プロトコルの実装に取り組んでいます。実装の問題でブロックされています。長さ 255 および ID 255 のメッセージによって停止されるまで、メッセージを正しく解析します。以下は、ピアから受信した生データのダンプです。間違ったメッセージはオフセット 0x3ff にあり、最初に len = 0x00FF と id=0xFF を解析していると思います。
私の実装では、BitTorrent プロトコルで指定されているように、長さのプレフィックスと ID を持つメッセージのみを処理し、それに応じてソケット データを処理します。
BitTorrent 仕様には、ソケットからのデータを解析する際の他の種類のメッセージまたはデータの処理については何も記載されていません。しかし、この種のデータは、クライアントを試すすべてのピアで受信されています。つまり、0x00FF や 0xFFFF のようなばかげた長さのメッセージの解析に失敗し、予想よりもはるかに多くのキープアライブがあり、すべてバイト 0x0a で終わります。ピア ワイヤ プロトコルの実装にはさらに何が必要ですか?