Refer: https://github.com/mathieucarbou/ESPAsyncWebServer/discussions/165 Let's try to coalesce two (or more) consecutive poll events into one this usually happens with poor implemented user-callbacks that are runs too long and makes poll events to stack in the queue if consecutive user callback for a same connection runs longer that poll time then it will fill the queue with events until it deadlocks. This is a workaround to mitigate such poor designs and won't let other events/connections to starve the task time. It won't be effective if user would run multiple simultaneous long running callbacks due to message interleaving. todo: implement some kind of fair dequeing or (better) simply punish user for a bad designed callbacks by resetting hog connections
AsyncTCP
A fork of the AsyncTCP library by @me-no-dev.
Async TCP Library for ESP32 Arduino
This is a fully asynchronous TCP library, aimed at enabling trouble-free, multi-connection network environment for Espressif's ESP32 MCUs.
This library is the base for ESPAsyncWebServer
AsyncClient and AsyncServer
The base classes on which everything else is built. They expose all possible scenarios, but are really raw and require more skills to use.
Changes in this fork
-
Based on ESPHome fork
-
library.propertiesfor Arduino IDE users -
Add
CONFIG_ASYNC_TCP_MAX_ACK_TIME -
Add
CONFIG_ASYNC_TCP_PRIORITY -
Add
CONFIG_ASYNC_TCP_QUEUE_SIZE -
Add
setKeepAlive() -
Arduino 3 / ESP-IDF 5 compatibility
-
Better CI
-
Better example
-
Customizable macros
-
Fix for "Required to lock TCPIP core functionality". Ref: https://github.com/mathieucarbou/AsyncTCP/issues/27 and https://github.com/espressif/arduino-esp32/issues/10526
-
Fix for "ack timeout 4" client disconnects.
-
Fix from https://github.com/me-no-dev/AsyncTCP/pull/173 (partially applied)
-
IPv6
-
LIBRETINY support
-
LibreTuya
-
Reduce logging of non critical messages
-
Use IPADDR6_INIT() macro to set connecting IPv6 address
-
xTaskCreateUniversal function
Coordinates
mathieucarbou/AsyncTCP @ ^3.2.15
Important recommendations
Most of the crashes are caused by improper configuration of the library for the project. Here are some recommendations to avoid them.
I personally use the following configuration in my projects:
-D CONFIG_ASYNC_TCP_MAX_ACK_TIME=5000 // (keep default)
-D CONFIG_ASYNC_TCP_PRIORITY=10 // (keep default)
-D CONFIG_ASYNC_TCP_QUEUE_SIZE=64 // (keep default)
-D CONFIG_ASYNC_TCP_RUNNING_CORE=1 // force async_tcp task to be on same core as the app (default is core 0)
-D CONFIG_ASYNC_TCP_STACK_SIZE=4096 // reduce the stack size (default is 16K)