Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

CoreHTTP-Basis-Multithread-Demo - Kostenlos RTOS

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

CoreHTTP-Basis-Multithread-Demo

Wichtig

Diese Demo wird im Amazon-FreeRTOS-Repository gehostet, das veraltet ist. Wir empfehlen, dass Sie hier beginnen, wenn Sie ein neues Projekt erstellen. Wenn Sie bereits ein vorhandenes FreeRTOS-Projekt haben, das auf dem inzwischen veralteten Amazon-FreeRTOS-Repository basiert, finden Sie weitere Informationen unter. Leitfaden zur Migration des kostenlosen RTOS Github-Repositorys von Amazon

Einführung

Diese Demo verwendet die threadsicheren Warteschlangen von FreeRTOS, um Anfragen und Antworten zu speichern, die auf ihre Bearbeitung warten. In dieser Demo gibt es drei Aufgaben, die Sie beachten sollten.

  • Die Hauptaufgabe wartet darauf, dass Anfragen in der Anforderungswarteschlange erscheinen. Sie sendet diese Anfragen über das Netzwerk und platziert die Antwort dann in die Antwortwarteschlange.

  • Eine Anforderungsaufgabe erstellt Anforderungsobjekte der HTTP-Bibliothek, die an den Server gesendet werden sollen, und platziert sie in der Anforderungswarteschlange. Jedes Anforderungsobjekt gibt einen Bytebereich der S3-Datei an, die die Anwendung für den Download konfiguriert hat.

  • Eine Antwortaufgabe wartet darauf, dass Antworten in der Antwortwarteschlange erscheinen. Sie protokolliert jede Antwort, die sie erhält.

Diese grundlegende Multithread-Demo ist so konfiguriert, dass sie nur eine TLS-Verbindung mit Serverauthentifizierung verwendet. Dies ist für den Amazon S3 S3-HTTP-Server erforderlich. Die Authentifizierung auf Anwendungsebene erfolgt mithilfe der Signature Version 4-Parameter in der vorsignierten URL-Abfrage.

Organisation des Quellcodes

Das Demo-Projekt ist benannt http_demo_s3_download_multithreaded.c und kann im freertos/demos/coreHTTP/ Verzeichnis und auf der GitHubWebsite gefunden werden.

Das Demo-Projekt erstellen

Das Demo-Projekt verwendet die kostenlose Community-Edition von Visual Studio. Um die Demo zu erstellen:

  1. Öffnen Sie die mqtt_multitask_demo.sln Visual Studio-Lösungsdatei in der Visual Studio-IDE.

  2. Wählen Sie im Build-Menü der IDE die Option Build Solution aus.

Anmerkung

Wenn Sie Microsoft Visual Studio 2017 oder früher verwenden, müssen Sie ein Platform Toolset auswählen, das mit Ihrer Version kompatibel ist: Project -> RTOSDemos Properties -> Platform Toolset.

Konfiguration des Demo-Projekts

Die Demo verwendet den FreeRTOS+TCP TCP/IP-Stack. Folgen Sie daher den Anweisungen für das TCP/IP-Starterprojekt, um:

Konfiguration der Amazon S3 S3-HTTP-Serververbindung

Folgen Sie den Anweisungen Konfiguration der Amazon S3 S3-HTTP-Serververbindung in der CoreHTTP Basic Download-Demo.

Funktionalität

Die Demo erstellt insgesamt drei Aufgaben:

  • Eine, die Anfragen sendet und Antworten über das Netzwerk empfängt.

  • Eine, die Sendeanfragen erstellt.

  • Eine, die die empfangenen Antworten verarbeitet.

In dieser Demo ist die Hauptaufgabe:

  1. Erstellt die Anforderungs- und Antwortwarteschlangen.

  2. Stellt die Verbindung zum Server her.

  3. Erstellt die Anforderungs- und Antwortaufgaben.

  4. Wartet darauf, dass die Anforderungswarteschlange Anfragen über das Netzwerk sendet.

  5. Platziert über das Netzwerk empfangene Antworten in die Antwortwarteschlange.

Die Anforderungsaufgabe:

  1. Erstellt jede der Bereichsanforderungen.

Die Antwortaufgabe:

  1. Verarbeitet jede der eingegangenen Antworten.

Typdefinitionen

Die Demo definiert die folgenden Strukturen zur Unterstützung von Multithreading.

Artikel anfragen

Die folgenden Strukturen definieren ein Anforderungselement, das in die Anforderungswarteschlange gestellt werden soll. Das Anforderungselement wird in die Warteschlange kopiert, nachdem die Anforderungsaufgabe eine HTTP-Anfrage erstellt hat.

/** * @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;

Antwortelement

Die folgenden Strukturen definieren ein Antwortelement, das in die Antwortwarteschlange aufgenommen werden soll. Das Antwortelement wird in die Warteschlange kopiert, nachdem die HTTP-Hauptaufgabe eine Antwort über das Netzwerk erhalten hat.

/** * @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;

Hauptaufgabe zum Senden von HTTP

Die Hauptaufgabe der Anwendung:

  1. Analysiert die vorsignierte URL für die Hostadresse, um eine Verbindung mit dem Amazon S3 S3-HTTP-Server herzustellen.

  2. Analysiert die vorsignierte URL nach dem Pfad zu den Objekten im S3-Bucket.

  3. Stellt über TLS mit Serverauthentifizierung eine Verbindung zum Amazon S3 S3-HTTP-Server her.

  4. Erstellt die Anforderungs- und Antwortwarteschlangen.

  5. Erstellt die Anfrage- und Antwortaufgaben.

Die Funktion prvHTTPDemoTask() führt diese Einrichtung durch und gibt den Demo-Status an. Der Quellcode für diese Funktion ist auf Github zu finden.

In der Funktion prvDownloadLoop() blockiert und wartet die Hauptaufgabe auf Anfragen aus der Anforderungswarteschlange. Wenn sie eine Anfrage erhält, sendet sie sie mithilfe der API-FunktionHTTPClient_Send(). Wenn die API-Funktion erfolgreich war, wird die Antwort in die Antwortwarteschlange gestellt.

Der Quellcode für prvDownloadLoop() ist auf Github zu finden.

HTTP-Anforderungsaufgabe

Die Anforderungsaufgabe ist in der Funktion angegebenprvRequestTask. Der Quellcode für diese Funktion ist auf Github zu finden.

Die Anforderungsaufgabe ruft die Größe der Datei im Amazon S3 S3-Bucket ab. Dies erfolgt in der FunktionprvGetS3ObjectFileSize. Der Header „Connection: keep-alive“ wird zu dieser Anfrage an Amazon S3 hinzugefügt, damit die Verbindung auch nach dem Senden der Antwort bestehen bleibt. Der Amazon S3 S3-HTTP-Server unterstützt derzeit keine HEAD-Anfragen, die eine vorsignierte URL verwenden, daher wird das 0-te Byte angefordert. Die Größe der Datei ist im Content-Range Header-Feld der Antwort enthalten. Eine 206 Partial Content Antwort wird vom Server erwartet; jeder andere empfangene Antwortstatuscode ist ein Fehler.

Der Quellcode für prvGetS3ObjectFileSize kann auf Github gefunden werden.

Nach dem Abrufen der Dateigröße fordert die Anforderungsaufgabe weiterhin jeden Bereich der Datei an. Jede Bereichsanforderung wird in die Anforderungswarteschlange gestellt, damit die Hauptaufgabe gesendet werden kann. Die Dateibereiche werden vom Demo-Benutzer im Makro konfiguriertdemoconfigRANGE_REQUEST_LENGTH. Bereichsanforderungen werden in der HTTP-Clientbibliothek-API mithilfe der Funktion HTTPClient_AddRangeHeader nativ unterstützt. Die Funktion prvRequestS3ObjectRange demonstriert, wie man sie benutztHTTPClient_AddRangeHeader().

Der Quellcode für die Funktion prvRequestS3ObjectRange ist auf Github zu finden.

HTTP-Antwort-Aufgabe

Die Antwortaufgaben warten in der Antwortwarteschlange auf Antworten, die über das Netzwerk empfangen wurden. Die Hauptaufgabe füllt die Antwortwarteschlange, wenn sie erfolgreich eine HTTP-Antwort empfängt. Diese Aufgabe verarbeitet die Antworten, indem sie den Statuscode, die Header und den Hauptteil protokolliert. Eine reale Anwendung kann die Antwort verarbeiten, indem sie beispielsweise den Antworttext in den Flash-Speicher schreibt. Wenn der Antwortstatuscode nicht lautet206 partial content, teilt die Aufgabe der Hauptaufgabe mit, dass die Demo fehlschlagen sollte. Die Antwortaufgabe ist in der Funktion angegeben. prvResponseTask Der Quellcode für diese Funktion ist auf Github zu finden.

DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.