Hallo Zusammen. Ich bin dabei einen HTTP Server auf dem ESP aufzusetzen. Nur leider verstehe ich die Unterschiede der jeweiligen APIs nicht. Folgende Bibliothek verwende ich: lwip Es gibt dazu mehrere APIs für die Implementierung: https://www.nongnu.org/lwip/2_1_x/group__api.html 1. raw API 2. Sequential-style API 3. Socket API Die raw API wird meiner Meinung nach verwendet, wenn kein Betriebssystem verwendet werden kann (Aufrufen durch Events). Wie sieht's mit den anderen beiden aus? Will mir da jemand kurz den Unterschied erklären. Danke ;)
Alexander M. schrieb: > https://www.nongnu.org/lwip/2_1_x/group__api.html > > 1. raw API > 2. Sequential-style API > 3. Socket API > > Die raw API wird meiner Meinung nach verwendet, wenn kein Betriebssystem > verwendet werden kann (Aufrufen durch Events). > > Wie sieht's mit den anderen beiden aus? Will mir da jemand kurz den > Unterschied erklären. Die einzige Aufgabe der von dir selbst verlinkten Doku ist: dir genau diese Unterschiede zu erklären. Lesen und verstehen musst du das selbst. Da kann dir niemand bei helfen. Lernen ist immer eigene Anstrengung.
Warum muss es unbedingt eigener Server sein und nicht bspw.: https://github.com/me-no-dev/ESPAsyncWebServer ? Was hast du nochmal vor? Vielleicht gibts schon fertig? MfG
Danke, die library habe ich mir schon mal angeschaut. Ich benötige aber die Sockets so schon, weil ich noch ein paar weitere Server implementieren möchte.. Mir ist der grundlegende Gedanke aber zwischen der sequential und der socket API aber nicht ganz klar, stimmt das: Verwendung der Socket API bei Netzwerkprogrammierung in Windows / Unix, Verwendung der sequential API bei embedded Devices? Ich kapiere es einfach nicht.. Grüße
Wie genau guckst du denn so? https://github.com/me-no-dev/ESPAsyncTCP 8266 https://github.com/me-no-dev/AsyncTCP 32 Wenn es nur lwip werden soll, wird es raw und unter dem Link von dir steht auch warum. ;-) Welcher Art weiterer Server?
Alexander M. schrieb: > Ich benötige aber die Sockets so schon Dann ist die Entscheidung schon schon gefällt, warum fragst du noch?
Danke :) http, https & dns. Die 3 Services bräuchte ich. OS: FreeRTOS, jeder Service läuft auf 1 Task Warum denn "raw", meiner Meinung nach wird "raw" nur dann verwendet, wenn kein Betriebssystem vorhanden ist? Grüße
Alexander M. schrieb: > http, https & dns. Die 3 Services bräuchte ich. Die sind alle drei icht Bestandteil von lwIP, die würde man oben drauf setzen. > meiner Meinung nach wird "raw" nur dann verwendet, > wenn kein Betriebssystem vorhanden ist? Ich denke, da irrst du dich.
Alexander M. schrieb: > 1. raw API > 2. Sequential-style API > 3. Socket API Nummer 3 wird 1:1 genutzt, wie bei klassischen Berkeley-Sockets, wie man sie von anderen Systemen her kennt, hat aber einen großen Overhead. Nummer 2 bietet im Prinzip die gleichen Funktionen, aber mit anderen Parametern. Die ist so ausgelegt, dass die Daten nicht alle jedes mal im Speicher umher kopiert werden müssen, braucht damit weniger Speicher und Laufzeit als Nummmer 3, aber die Benutzung ist immer noch sehr ähnlich. Beide brauchen Multithreading. Nummer 1 wird komplett anders verwendet, ist aber bei weitem am effizientesten und geht auch ohne Multithreading. Nummer 3 setzt auf Nummer 2 auf, das wiederum auf Nummer 1 aufsetzt. Somit verhält sich dann auch die Codegröße entsprechend, da man nicht benötigte Interfaces komplett abschalten kann.
Man kann das "raw" Interface auch mit einem RTOS verwenden. Dann muss man sich aber selbst darum kümmern, die Daten zwischen dem Threads hin und her zu schicken, weil lwip dann keine Synchronisation mehr bietet. Das ist bei den anderen beiden APIs anders.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.