Scarica la demo di CoreHTTP basic S3 - Gratuito RTOS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Scarica la demo di CoreHTTP basic S3

Importante

Questa demo è ospitata nel repository Amazon-FreeRTOS che è obsoleto. Ti consigliamo di iniziare da qui quando crei un nuovo progetto. Se hai già un progetto FreeRTOS esistente basato sull'ormai obsoleto repository Amazon-FreerTOS, consulta il. Guida alla migrazione del RTOS repository Github gratuito da Amazon

Introduzione

Questa demo mostra come utilizzare le richieste di intervallo per scaricare file dal server HTTP Amazon S3. Le richieste di intervallo sono supportate nativamente nell'API CoreHTTP quando vengono utilizzate HTTPClient_AddRangeHeader per creare la richiesta HTTP. Per un ambiente con microcontrollore, le richieste di intervallo sono altamente consigliate. Scaricando un file di grandi dimensioni in intervalli separati, anziché in una singola richiesta, ogni sezione del file può essere elaborata senza bloccare il socket di rete. Le richieste di intervallo riducono il rischio di perdita di pacchetti, il che richiede ritrasmissioni sulla connessione TCP, e quindi migliorano il consumo energetico del dispositivo.

Questo esempio utilizza un'interfaccia di trasporto di rete che utilizza mbedTLS per stabilire una connessione reciprocamente autenticata tra un client di dispositivo IoT che esegue CoreHTTP e il server HTTP Amazon S3.

Nota

Per configurare ed eseguire le demo di FreerTOS, segui i passaggi indicati. Inizia con Free RTOS

Filettatura singola contro thread multiplo

Esistono due modelli di utilizzo CoreHTTP, a thread singolo e multithread (multitasking). Sebbene la demo in questa sezione esegua la libreria HTTP in un thread, in realtà dimostra come utilizzare CoreHTTP in un ambiente a thread singolo (solo un'attività utilizza l'API HTTP nella demo). Sebbene le applicazioni a thread singolo debbano chiamare ripetutamente la libreria HTTP, le applicazioni multithread possono invece inviare richieste HTTP in background all'interno di un'attività agente (o daemon).

Organizzazione del codice sorgente

Il progetto dimostrativo è denominato http_demo_s3_download.c e può essere trovato nella freertos/demos/coreHTTP/ directory e sul GitHubsito Web.

Configurazione della connessione al server HTTP Amazon S3

Questa demo utilizza un URL prefirmato per connettersi al server HTTP Amazon S3 e autorizzare l'accesso all'oggetto da scaricare. La connessione TLS del server HTTP Amazon S3 utilizza solo l'autenticazione del server. A livello di applicazione, l'accesso all'oggetto viene autenticato con i parametri della query URL prefirmata. Segui i passaggi seguenti per configurare la connessione a. AWS

  1. Configura un AWS account:

    1. Se non l'hai già fatto, crea e attiva un AWS account.

    2. Gli account e le autorizzazioni vengono impostati utilizzando AWS Identity and Access Management (IAM). IAM ti consente di gestire le autorizzazioni per ogni utente del tuo account. Per impostazione predefinita, un utente non dispone delle autorizzazioni fino a quando non le concede il proprietario principale.

      1. Per aggiungere un utente al tuo AWS account, consulta la IAM User Guide.

      2. Concedi l'autorizzazione al tuo AWS account per accedere a FreerTOS aggiungendo queste AWS IoT politiche:

        • Amazon S3 FullAccess

  2. Crea un bucket in S3 seguendo la procedura descritta in Come si crea un bucket S3? nella Guida per l'utente della console di Amazon Simple Storage Service.

  3. Carica un file su S3 seguendo la procedura descritta in Come faccio a caricare file e cartelle in un bucket S3? .

  4. Genera un URL prefirmato utilizzando lo script che si trova inFreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py. Per istruzioni d'uso, vedereFreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md.

Funzionalità

La demo recupera innanzitutto la dimensione del file. Quindi richiede ogni intervallo di byte in sequenza, in un ciclo, con dimensioni dell'intervallo di. democonfigRANGE_REQUEST_LENGTH

Il codice sorgente per la demo è disponibile sul sito Web. GitHub

Connessione al server HTTP Amazon S3

La funzione connectToServerWithBackoffRetries () tenta di stabilire una connessione TCP al server HTTP. Se la connessione fallisce, riprova dopo un timeout. Il valore di timeout aumenterà esponenzialmente fino al raggiungimento del numero massimo di tentativi o al raggiungimento del valore di timeout massimo. connectToServerWithBackoffRetries()restituisce uno stato di errore se la connessione TCP al server non può essere stabilita dopo il numero di tentativi configurato.

La funzione prvConnectToServer() dimostra come stabilire una connessione al server HTTP Amazon S3 utilizzando solo l'autenticazione del server. Utilizza l'interfaccia di trasporto basata su MBEDTLS implementata nel file freeRTOS-Plus/source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c.

Il codice prvConnectToServer() sorgente GitHubdi è disponibile su.

Creazione di una richiesta di intervallo

La funzione API HTTPClient_AddRangeHeader() supporta la serializzazione di un intervallo di byte nelle intestazioni della richiesta HTTP per formare una richiesta di intervallo. Le richieste di intervallo vengono utilizzate in questa demo per recuperare la dimensione del file e per richiedere ogni sezione del file.

La funzione prvGetS3ObjectFileSize() recupera la dimensione del file nel bucket S3. L'Connection: keep-aliveintestazione viene aggiunta in questa prima richiesta ad Amazon S3 per mantenere aperta la connessione dopo l'invio della risposta. Il server HTTP S3 attualmente non supporta le richieste HEAD che utilizzano un URL prefirmato, quindi è richiesto il byte 0. La dimensione del file è contenuta nel campo di intestazione della risposta. Content-Range È prevista una 206 Partial Content risposta dal server; qualsiasi altro codice di stato della risposta ricevuto è un errore.

Il codice sorgente di prvGetS3ObjectFileSize() è disponibile su. GitHub

Dopo aver recuperato la dimensione del file, questa demo crea una nuova richiesta di intervallo per ogni intervallo di byte del file da scaricare. Viene utilizzato HTTPClient_AddRangeHeader() per ogni sezione del file.

Invio di richieste di intervallo e ricezione di risposte

La funzione prvDownloadS3ObjectFile() invia le richieste di intervallo in un ciclo fino al download dell'intero file. La funzione API HTTPClient_Send() invia una richiesta e riceve la risposta in modo sincrono. Quando la funzione ritorna, la risposta viene ricevuta in unxResponse. Viene quindi verificato che il codice di stato sia valido 206 Partial Content e il numero di byte scaricati finora viene incrementato del valore dell'intestazione. Content-Length

Il codice sorgente di è disponibile su. prvDownloadS3ObjectFile() GitHub