forked from me-no-dev/ESPAsyncWebServer
-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #69 from ESP32Async/max-socket
doc(example): pioarduino example with hybrid compilation to show how to increase the max sockets (CONFIG_LWIP_MAX_ACTIVE_TCP)
- Loading branch information
Showing
3 changed files
with
179 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
.DS_Store | ||
.lh | ||
/.pio | ||
/.vscode | ||
/logs | ||
|
||
/sdkconfig.* | ||
/CMakeLists.txt | ||
/dependencies.lock | ||
/.dummy | ||
/managed_components |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
[env] | ||
framework = arduino | ||
platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.11/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.3.5 | ||
ESP32Async/ESpAsyncWebServer @ 3.7.0 | ||
|
||
custom_sdkconfig = CONFIG_LWIP_MAX_ACTIVE_TCP=32 | ||
|
||
[env:esp32dev] | ||
board = esp32dev |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |