レスポンスの中身
- Peerの一覧が含まれている*
- Bencoding形式で渡される
- 圧縮して行うことができる
本章では、 Tracker へのレスポンス について解説していきま す。リクエストとレスポンスの両方について理解ができた訳で すから、あなたは、Trackerサーバーを作る事がでくるようにな さているはずです。 実際に、Trackerサーバーを作成してみましょう。そして、実際 動作させてみて、想定した通りのリクエスト、レスポンスが飛 び交い、データの配信が開始される事を確認ていきます。
レスポンスの中身はPeerの一覧
Trackerはデータを配信しているPeerの一覧を返します。レスポ ンスととして最低限必要なのは、アドレスとポート番号の一ラ ンクです。 この2つのデータさえあればもTorrentクライアント同時でデー タを配信は合う事が可能です。 実際に渡されるデータの形式を見ていきましょう。
レスポンスはBencode形式
Peer の一覧も Torrent ファイルと同様に Bencoding 形式で渡 されます。
{
peers:
[
{
peer_id:<benstring>
ip:<benstring 127.0.0.1の形式>
port:<beninteger>
}
{
peer_id:<benstring>
ip:<benstring 127.0.0.1の形式>
port:<beninteger>
}
...
]
interval:<beninteger 次にTrackerへアクセスする時間 単位は秒>
}
intervalキーを除けば、ipアドレス、port番号、peer_id いっ た、リクエスト時にTracker へ渡した情報が含まれている事デ ータが含まれている事が読み取れるでしょう。 “interval”は次に Tracker へアクセスすべき目安の時間です。 どの程度の間隔でアクセスすべきなのかは、Torrent クライアン トからは判断できせん。どの程度のPeerが配信に参加してい て、どの程度のPeerが新規に参加しているを知らないためで す。 Tracker サーバー は自身の状態を加味して、この時間を決めま す。 例えば、頻繁にTrackerへアクセスされるとTrackerサーバーへ の負荷があがります。Peerのリストは更新されていない。更新 されても対象にあなたのアドレスが含まれるので更新する必要 性が弱い。といった時は、特別、アクセス時間を長く取るとい つた対応が考えられます。
圧縮して送信する事もできる
データを圧縮して相手へ送る事もできます。リクエストに
"&compact=1" を含めると、対応しているTracker
であれば、データを圧縮して送ってくれます。
{
interval:
不正な値を受け取った時もBencode
Trackerはデ不正な値を受け取った時も、Bencode形式のデー タを返します。人がよんで解るようなメッセージを付けて以下 のような形式で返します。
{
failure reason:<benstring 失敗した理由>
}
これで、レスポンスされデータの形式については、済みまし た。では、実際にTrackerサーバー、Trackerクライアントほ実 装してみましょう。
Kyorohiro work