Optimierung für den WebServer

Auf der Suche nach Speicheroptimierung z.B. für MP3 wird nicht abgespielt. NeoPixel leuchtet Rot und bei Tests für das demnächst erscheinende Arduino 3 Framework bin ich auf diesen offiziellen Fork des ESPAsyncWebserver gestoßen:

Ich sehe bei der neuen Bibliothek diese Vorteile:

  • 1:1 Ersetzung des bestehenden Webservers, keine Codeänderungen
  • Offiziell gelistet in PlatformIO-Registry
  • Bekannte Bugs gefixt, ESP32AsyncWebserver wird seit Jahren nicht mehr gepflegt/weiterentwickelt
  • Speicheroptimiertes Ausliefern von Websocket JSON-Nachrichten
  • Websocket Nachrichtenschlange lässt sich in der Größe konfigurieren WS_MAX_QUEUED_MESSAGES
  • ArduinoJSON 7 kompatibel
  • Kompiliert mit dem Arduino 3 Framework (erscheint in einigen Wochen)

So könnt Ihr es ausprobieren, in platform.ini diese Zeilen ändern:

lib_deps =
...
;	https://github.com/me-no-dev/ESPAsyncWebServer.git#1d46269
;	https://github.com/me-no-dev/AsyncTCP.git#ca8ac5f
    https://github.com/mathieucarbou/ESPAsyncWebServer.git
...

Die Abhängigkeit zur AsyncTCP Bibliothek wird dann automatisch dazugeladen.

Die Speicheroptimierung verstehe ich so das der JSON Puffer nur einmal allokiert werden muss (jetzt 2-3 Mal, JSON-Objekt, JSON-Serialisierung + Puffer für Auslieferung).

auto buffer = std::make_shared<std::vector<uint8_t>>(len);

@laszloh Das ist doch Dein Fachgebiet, evt. kannst Du es besser erklären :wink:

Allerdings bin ich mit dem Ergebnis noch nicht ganz glücklich. Ich bekomme bei sehr hektischen Lautstärkeänderung über die Web-UI ab und an die Meldung „Websocket: Cannot send data (Too many messages queued)!“. Auch eine Speicherreduzierung konnte ich nicht wirklich feststellen.

Meinungen gern hier, ein Test ist ja schnell gemacht…

1 „Gefällt mir“