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
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…