# TrackerはHttpサーバ

* **TrackerはHttpサーバ**
* **Get リクエストでデータ**

Tracker は Httpサーバーです。皆さんがいつも利用しているイ ンターネットのからサイトを表示するのと同じルールで動作し ています。

例えば、インターネットで調べ物をしたい時に、Googleを利用 すると思います。ChromeなりFirefoxなり、IEなどを利用し て、「<http://www.google.com> 」にアクセスします。すると、検索ワードを入力するためのページが表示されます。

Trackerもそれと同様の仕組みで動作しています。異なるのは、 人が見やすいように加工されたHtml形式のページを渡す変わり に、Bencodingでエンコードされたバイナリーデータが渡すところです。

## Getリクエストで依頼をだす

Tracker では、Getリクエストを利用して、データを配信してい るPeerの一覧を取得はます。Getリクエストは、URLの末端 に、「?xx=yyy\&mm=nnn」といった文字列を付与したもので す。

Googleなどの検索エンジンで検索した後、アドレスを確認してみてください。例えば、androidと検索した場合、「? q=android\&oq=android」といった文字列が追加されていると思 います。「q=」の後に検索ワードの「android」が続いています。 このように、Getリクエストは、アドレスにサーバーへしてほしい指示やデータを含めることができます。

Trackerも同様の仕組みで、依頼をだしています。

## Httpサーバーを作成しよう

TrackerがHttpサーバーである事がわかったところで、 Http サーバーを作成してみましょう。Dart言語では、簡単にHttpサー バーを作成する事ができます。 まずは、ブラウザーからGetリクエストを受け取った時にHello と表示してみます。

```
{
  HttpServer.bind(address, port).then((io.HttpServer server) {
    server.listen((HttpRequest request) {
      request.response.write("hello");
      request.response.close();
    });
  });
}
```

といった感じで書けます。Getリクエストで渡された値を知り たい場合には、「request.uri.queryParameters」として、確認 できます。例えば、「 test」というキーで渡された値を相手に返すコードは以下のよ うに書けます。

```
{
  HttpServer.bind(address, port).then((io.HttpServer server) {
    server.listen((HttpRequest request) {
      Map<String, String> parameter = request.uri.queryParameters;
      request.response.write("hello"+ parameter[“test”]);
      request.response.close();
    });
  });
}
```

これで、Getリクエストを扱う事ができるようになりました 。後は、このリクエストに応じて、Peerの一覧、つまりは、 今までリクエストしてきた端末のアドレス等を渡せば、簡易の Trackerサーバーが完成します。

Kyorohiro work

<http://kyorohiro.strikingly.com>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://nazenani-torrent.firefirestyle.net/tracker/http.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
