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…
