

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Démo multithread de base de CoreHTTP
<a name="core-http-bmt-demo"></a>

**Important**  <a name="deprecation-message-demo"></a>
Cette démo est hébergée sur le référentiel Amazon-FreeRTOS qui est obsolète. Nous vous recommandons de [commencer ici](freertos-getting-started-modular.md) lorsque vous créez un nouveau projet. Si vous possédez déjà un projet FreeRTOS basé sur le référentiel Amazon-FreeRTOS, désormais obsolète, consultez le. [Guide de migration du référentiel Github d'Amazon-FreeRTOS](github-repo-migration.md)

## Introduction
<a name="core-http-bmt-demo-intro"></a>

Cette démo utilise les [files d'attente sécurisées de FreeRTOS](https://freertos.org/a00018.html) pour contenir les demandes et les réponses en attente de traitement. Dans cette démo, il y a trois tâches à prendre en compte.
+ La tâche principale attend que les demandes apparaissent dans la file d'attente des demandes. Il enverra ces demandes sur le réseau, puis placera la réponse dans la file d'attente des réponses.
+ Une tâche de demande crée des objets de requête de bibliothèque HTTP à envoyer au serveur et les place dans la file d'attente des demandes. Chaque objet de demande spécifie une plage d'octets du fichier S3 que l'application a configuré pour le téléchargement.
+ Une tâche de réponse attend que les réponses apparaissent dans la file d'attente des réponses. Il enregistre toutes les réponses qu'il reçoit.

Cette démo multithread de base est configurée pour utiliser une connexion TLS avec authentification du serveur uniquement, ce qui est requis par le serveur HTTP Amazon S3. L'authentification de la couche application est effectuée à l'aide des paramètres [Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) dans la [requête d'URL présignée](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html).

## Organisation du code source
<a name="core-http-bmt-demo-source"></a>

Le projet de démonstration porte un nom `http_demo_s3_download_multithreaded.c` et se trouve dans le `freertos/demos/coreHTTP/` répertoire et [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download_multithreaded.c)sur le site Web.

## Création du projet de démonstration
<a name="core-http-bmt-demo-building"></a>

Le projet de démonstration utilise l'[édition communautaire gratuite de Visual Studio](https://visualstudio.microsoft.com/vs/community/). Pour créer la démo :

1. Ouvrez le fichier de solution `mqtt_multitask_demo.sln` Visual Studio depuis l'IDE Visual Studio.

1. Sélectionnez **Build Solution** dans le menu **Build** de l'IDE.

**Note**  
Si vous utilisez Microsoft Visual Studio 2017 ou une version antérieure, vous devez sélectionner un jeu d'**outils de plate-forme compatible avec votre version : Projet -> RTOSDemos Propriétés -> Ensemble** **d'outils de plate-forme**.

## Configuration du projet de démonstration
<a name="core-http-bmt-demo-configuring"></a>

[La démo utilise la [ TCP/IP pile FreeRTOS\$1TCP](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html). Suivez donc les instructions fournies au projet de démarrage TCP/IP pour :](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/examples_FreeRTOS_simulator.html)

1. Installez les [composants requis](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/examples_FreeRTOS_simulator.html#prerequisites) (tels que WinPCap).

1. [Définissez éventuellement une adresse IP statique ou dynamique, une adresse de passerelle et un masque réseau](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/examples_FreeRTOS_simulator.html#static-dynamic).

1. [Définissez éventuellement une adresse MAC](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/examples_FreeRTOS_simulator.html#mac-addr).

1. [Sélectionnez une interface réseau Ethernet](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/examples_FreeRTOS_simulator.html#network-interface) sur votre machine hôte.

1. **Il est important** de [tester votre connexion réseau](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/examples_FreeRTOS_simulator.html#connectivity-test) avant d'essayer d'exécuter la démo HTTP.

## Configuration de la connexion au serveur HTTP Amazon S3
<a name="core-http-bmt-demo-configuring-connection"></a>

Suivez les instructions de la *démo [Configuration de la connexion au serveur HTTP Amazon S3](core-http-s3-download-demo.md#core-http-s3-download-demo-configure-server) de téléchargement de base de CoreHTTP*.

## Fonctionnalité
<a name="core-http-bmt-demo-functionality"></a>

La démo crée trois tâches au total : 
+ Celui qui envoie des demandes et reçoit des réponses sur le réseau.
+ Celui qui crée des demandes à envoyer.
+ Celui qui traite les réponses reçues.

Dans cette démonstration, la tâche principale est la suivante : 

1. Crée les files d'attente de demandes et de réponses. 

1. Crée la connexion au serveur.

1. Crée les tâches de demande et de réponse.

1. Attend que la file d'attente envoie des demandes sur le réseau.

1. Place les réponses reçues sur le réseau dans la file d'attente des réponses.

La tâche de demande :

1. Crée chacune des demandes de plage.

La tâche de réponse :

1. Traite chacune des réponses reçues.

## Typedefs
<a name="core-http-bmt-demo-typedefs"></a>

La démo définit les structures suivantes pour prendre en charge le multithreading.

**Demander des articles**

Les structures suivantes définissent un élément de demande à placer dans la file d'attente des demandes. L'élément de demande est copié dans la file d'attente une fois que la tâche de demande crée une requête HTTP.

```
/**
 * @brief Data type for the request queue.
 *
 * Contains the request header struct and its corresponding buffer, to be
 * populated and enqueued by the request task, and read by the main task. The
 * buffer is included to avoid pointer inaccuracy during queue copy operations.
 */
typedef struct RequestItem
{
    HTTPRequestHeaders_t xRequestHeaders;
    uint8_t ucHeaderBuffer[ democonfigUSER_BUFFER_LENGTH ];
} RequestItem_t;
```

**Élément de réponse**

Les structures suivantes définissent un élément de réponse à placer dans la file d'attente des réponses. L'élément de réponse est copié dans la file d'attente une fois que la tâche HTTP principale reçoit une réponse sur le réseau.

```
/**
 * @brief Data type for the response queue.
 *
 * Contains the response data type and its corresponding buffer, to be enqueued
 * by the main task, and interpreted by the response task. The buffer is
 * included to avoid pointer inaccuracy during queue copy operations.
 */
typedef struct ResponseItem
{
    HTTPResponse_t xResponse;
    uint8_t ucResponseBuffer[ democonfigUSER_BUFFER_LENGTH ];
} ResponseItem_t;
```

## Tâche d'envoi HTTP principale
<a name="core-http-bmt-demo-main-task"></a>

Tâche principale de l'application :

1. Analyse l'URL présignée de l'adresse de l'hôte afin d'établir une connexion avec le serveur HTTP Amazon S3.

1. Analyse l'URL présignée pour le chemin d'accès aux objets du compartiment S3.

1. Se connecte au serveur HTTP Amazon S3 à l'aide du protocole TLS avec authentification du serveur.

1. Crée les files d'attente de demandes et de réponses.

1. Crée les tâches de demande et de réponse.

La fonction `prvHTTPDemoTask()` effectue cette configuration et donne le statut de démonstration. Le code source de cette fonction se trouve sur [Github](https://github.com/FreeRTOS/FreeRTOS/blob/main/FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/HTTP_S3_Download_Multithreaded/DemoTasks/S3DownloadMultithreadedHTTPExample.c#L451-L650).

Dans la fonction`prvDownloadLoop()`, la tâche principale bloque et attend les demandes provenant de la file d'attente de demandes. Lorsqu'il reçoit une demande, il l'envoie à l'aide de la fonction API`HTTPClient_Send()`. Si la fonction API est réussie, elle place la réponse dans la file d'attente des réponses. 

Le code source de se `prvDownloadLoop()` trouve sur [Github](https://github.com/FreeRTOS/FreeRTOS/blob/main/FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/HTTP_S3_Download_Multithreaded/DemoTasks/S3DownloadMultithreadedHTTPExample.c#L1071-L1174).

## Tâche de requête HTTP
<a name="core-http-bmt-demo-request-task"></a>

La tâche de demande est spécifiée dans la fonction`prvRequestTask`. Le code source de cette fonction se trouve sur [Github](https://github.com/FreeRTOS/FreeRTOS/blob/main/FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/HTTP_S3_Download_Multithreaded/DemoTasks/S3DownloadMultithreadedHTTPExample.c#L778-L876).

La tâche de demande récupère la taille du fichier dans le compartiment Amazon S3. Cela se fait dans la fonction`prvGetS3ObjectFileSize`. L'en-tête « Connection : keep-alive » est ajouté à cette demande adressée à Amazon S3 afin de maintenir la connexion ouverte après l'envoi de la réponse. Le serveur HTTP Amazon S3 ne prend actuellement pas en charge les requêtes HEAD utilisant une URL présignée. Le 0ème octet est donc demandé. La taille du fichier est indiquée dans le champ d'`Content-Range`en-tête de la réponse. Une `206 Partial Content` réponse est attendue du serveur ; tout autre code d'état de réponse reçu est une erreur. 

Le code source de se `prvGetS3ObjectFileSize` trouve sur [Github](https://github.com/FreeRTOS/FreeRTOS/blob/main/FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/HTTP_S3_Download_Multithreaded/DemoTasks/S3DownloadMultithreadedHTTPExample.c#L757-L774).

Après avoir récupéré la taille du fichier, la tâche de demande continue de demander chaque plage du fichier. Chaque demande de plage est placée dans la file d'attente de la tâche principale à envoyer. Les plages de fichiers sont configurées par l'utilisateur de démonstration dans la macro`democonfigRANGE_REQUEST_LENGTH`. Les demandes de plage sont prises en charge de manière native dans l'API de la bibliothèque cliente HTTP à l'aide de cette fonction`HTTPClient_AddRangeHeader`. La fonction `prvRequestS3ObjectRange` montre comment utiliser`HTTPClient_AddRangeHeader()`.

Le code source de la fonction se `prvRequestS3ObjectRange` trouve sur [Github](https://github.com/FreeRTOS/FreeRTOS/blob/main/FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/HTTP_S3_Download_Multithreaded/DemoTasks/S3DownloadMultithreadedHTTPExample.c#L694-L753).

## Tâche de réponse HTTP
<a name="core-http-bmt-demo-response-task"></a>

Les tâches de réponse attendent dans la file d'attente les réponses reçues sur le réseau. La tâche principale remplit la file de réponses lorsqu'elle reçoit avec succès une réponse HTTP. Cette tâche traite les réponses en enregistrant le code d'état, les en-têtes et le corps. Une application du monde réel peut traiter la réponse en écrivant le corps de la réponse dans une mémoire flash, par exemple. Si le code d'état de la réponse ne l'est pas`206 partial content`, la tâche indique à la tâche principale que la démonstration doit échouer. La tâche de réponse est spécifiée dans la fonction`prvResponseTask`. Le code source de cette fonction se trouve sur [Github](https://github.com/FreeRTOS/FreeRTOS/blob/main/FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/HTTP_S3_Download_Multithreaded/DemoTasks/S3DownloadMultithreadedHTTPExample.c#L961-L1047).