summaryrefslogtreecommitdiff
path: root/libraries/ESP_Async_WebServer/pioarduino_examples
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ESP_Async_WebServer/pioarduino_examples')
-rw-r--r--libraries/ESP_Async_WebServer/pioarduino_examples/IncreaseMaxSockets/platformio.ini26
-rw-r--r--libraries/ESP_Async_WebServer/pioarduino_examples/IncreaseMaxSockets/src/main.cpp142
2 files changed, 168 insertions, 0 deletions
diff --git a/libraries/ESP_Async_WebServer/pioarduino_examples/IncreaseMaxSockets/platformio.ini b/libraries/ESP_Async_WebServer/pioarduino_examples/IncreaseMaxSockets/platformio.ini
new file mode 100644
index 0000000..7a5669d
--- /dev/null
+++ b/libraries/ESP_Async_WebServer/pioarduino_examples/IncreaseMaxSockets/platformio.ini
@@ -0,0 +1,26 @@
+[env]
+framework = arduino
+platform = https://github.com/pioarduino/platform-espressif32/releases/download/54.03.20/platform-espressif32.zip
+build_flags =
+ -Og
+ -Wall -Wextra
+ -Wno-unused-parameter
+ -D CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
+ ; -D CONFIG_ASYNC_TCP_MAX_ACK_TIME=5000
+ ; -D CONFIG_ASYNC_TCP_PRIORITY=10
+ -D CONFIG_ASYNC_TCP_QUEUE_SIZE=128
+ -D CONFIG_ASYNC_TCP_RUNNING_CORE=1
+ -D CONFIG_ASYNC_TCP_STACK_SIZE=4096
+upload_protocol = esptool
+monitor_speed = 115200
+monitor_filters = esp32_exception_decoder, log2file
+lib_compat_mode = strict
+lib_ldf_mode = chain
+lib_deps =
+ ESP32Async/AsyncTCP @ 3.4.0
+ ESP32Async/ESpAsyncWebServer @ 3.7.0
+
+custom_sdkconfig = CONFIG_LWIP_MAX_ACTIVE_TCP=32
+
+[env:esp32dev]
+board = esp32dev
diff --git a/libraries/ESP_Async_WebServer/pioarduino_examples/IncreaseMaxSockets/src/main.cpp b/libraries/ESP_Async_WebServer/pioarduino_examples/IncreaseMaxSockets/src/main.cpp
new file mode 100644
index 0000000..752c402
--- /dev/null
+++ b/libraries/ESP_Async_WebServer/pioarduino_examples/IncreaseMaxSockets/src/main.cpp
@@ -0,0 +1,142 @@
+// SPDX-License-Identifier: LGPL-3.0-or-later
+// Copyright 2016-2025 Hristo Gochkov, Mathieu Carbou, Emil Muratov
+
+//
+// This example demonstrates how to increase the maximum number of active TCP connections
+//
+// in platformo.ini:
+//
+// Use hybrid compilation to set the maximum number of active TCP connections
+//
+// custom_sdkconfig = CONFIG_LWIP_MAX_ACTIVE_TCP=32
+//
+// and increase the queue stack size
+//
+// -D CONFIG_ASYNC_TCP_QUEUE_SIZE=128
+//
+
+#include <Arduino.h>
+#include <AsyncTCP.h>
+#include <WiFi.h>
+#include <ESPAsyncWebServer.h>
+
+static const char *htmlContent PROGMEM = R"(
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Sample HTML</title>
+</head>
+<body>
+ <h1>Hello, World!</h1>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
+ rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
+ arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
+ accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
+ Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
+ dapibus elit, id varius sem dui id lacus.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
+ rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
+ arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
+ accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
+ Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
+ dapibus elit, id varius sem dui id lacus.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
+ rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
+ arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
+ accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
+ Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
+ dapibus elit, id varius sem dui id lacus.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
+ rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
+ arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
+ accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
+ Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
+ dapibus elit, id varius sem dui id lacus.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
+ rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
+ arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
+ accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
+ Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
+ dapibus elit, id varius sem dui id lacus.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
+ rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
+ arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
+ accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
+ Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
+ dapibus elit, id varius sem dui id lacus.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
+ rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
+ arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
+ accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
+ Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
+ dapibus elit, id varius sem dui id lacus.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
+ rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
+ arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
+ accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
+ Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
+ dapibus elit, id varius sem dui id lacus.</p>
+</body>
+</html>
+)";
+
+static const size_t htmlContentLength = strlen_P(htmlContent);
+
+static AsyncWebServer server(80);
+static AsyncEventSource events("/events");
+
+static volatile size_t requests = 0;
+
+void setup() {
+ Serial.begin(115200);
+
+ Serial.println("============================");
+ Serial.printf("CONFIG_LWIP_MAX_ACTIVE_TCP %d\n", CONFIG_LWIP_MAX_ACTIVE_TCP);
+ Serial.println("============================");
+
+ WiFi.mode(WIFI_STA);
+ WiFi.begin("IoT", "");
+
+ while (WiFi.status() != WL_CONNECTED) {
+ delay(500);
+ Serial.println("Connecting to WiFi...");
+ }
+
+ // HTTP endpoint
+ //
+ // > autocannon -c 32 -d 20 -t 30 --renderStatusCodes http://192.168.125.146/
+ //
+ server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
+ requests++;
+ request->send(200, "text/html", (uint8_t *)htmlContent, htmlContentLength);
+ });
+
+ // SSS endpoint
+ //
+ // launch 32 concurrent workers for 30 seconds
+ // > for i in {1..32}; do ( count=$(gtimeout 30 curl -s -N -H "Accept: text/event-stream" http://192.168.125.146/events 2>&1 | grep -c "^data:"); echo "Total: $count events, $(echo "$count / 4" | bc -l) events / second" ) & done;
+ //
+ server.addHandler(&events);
+
+ server.begin();
+}
+
+static uint32_t lastSSE = 0;
+static uint32_t deltaSSE = 10;
+
+static uint32_t lastHeap = 0;
+
+void loop() {
+ uint32_t now = millis();
+ if (now - lastSSE >= deltaSSE) {
+ events.send(String("ping-") + now, "heartbeat", now);
+ lastSSE = millis();
+ }
+
+#ifdef ESP32
+ if (now - lastHeap >= 2000) {
+ Serial.printf("Uptime: %3lu s, requests: %3u, Free heap: %" PRIu32 "\n", millis() / 1000, requests, ESP.getFreeHeap());
+ lastHeap = now;
+ }
+#endif
+}