Skip to content

Commit ca9e55e

Browse files
committed
doc(example): pioarduino example with hybrid compilation to show how to increase the max sockets (CONFIG_LWIP_MAX_ACTIVE_TCP)
1 parent a860312 commit ca9e55e

File tree

3 files changed

+179
-0
lines changed

3 files changed

+179
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.DS_Store
2+
.lh
3+
/.pio
4+
/.vscode
5+
/logs
6+
7+
/sdkconfig.*
8+
/CMakeLists.txt
9+
/dependencies.lock
10+
/.dummy
11+
/managed_components
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
[env]
2+
framework = arduino
3+
platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.11/platform-espressif32.zip
4+
build_flags =
5+
-Og
6+
-Wall -Wextra
7+
-Wno-unused-parameter
8+
-D CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
9+
; -D CONFIG_ASYNC_TCP_MAX_ACK_TIME=5000
10+
; -D CONFIG_ASYNC_TCP_PRIORITY=10
11+
-D CONFIG_ASYNC_TCP_QUEUE_SIZE=128
12+
-D CONFIG_ASYNC_TCP_RUNNING_CORE=1
13+
-D CONFIG_ASYNC_TCP_STACK_SIZE=4096
14+
upload_protocol = esptool
15+
monitor_speed = 115200
16+
monitor_filters = esp32_exception_decoder, log2file
17+
lib_compat_mode = strict
18+
lib_ldf_mode = chain
19+
lib_deps =
20+
ESP32Async/AsyncTCP @ 3.3.5
21+
ESP32Async/ESpAsyncWebServer @ 3.7.0
22+
23+
custom_sdkconfig = CONFIG_LWIP_MAX_ACTIVE_TCP=32
24+
25+
[env:esp32dev]
26+
board = esp32dev
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
// SPDX-License-Identifier: LGPL-3.0-or-later
2+
// Copyright 2016-2025 Hristo Gochkov, Mathieu Carbou, Emil Muratov
3+
4+
//
5+
// This example demonstrates how to increase the maximum number of active TCP connections
6+
//
7+
// in platformo.ini:
8+
//
9+
// Use hybrid compilation to set the maximum number of active TCP connections
10+
//
11+
// custom_sdkconfig = CONFIG_LWIP_MAX_ACTIVE_TCP=32
12+
//
13+
// and increase the queue stack size
14+
//
15+
// -D CONFIG_ASYNC_TCP_QUEUE_SIZE=128
16+
//
17+
18+
#include <Arduino.h>
19+
#include <AsyncTCP.h>
20+
#include <WiFi.h>
21+
#include <ESPAsyncWebServer.h>
22+
23+
static const char *htmlContent PROGMEM = R"(
24+
<!DOCTYPE html>
25+
<html>
26+
<head>
27+
<title>Sample HTML</title>
28+
</head>
29+
<body>
30+
<h1>Hello, World!</h1>
31+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
32+
rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
33+
arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
34+
accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
35+
Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
36+
dapibus elit, id varius sem dui id lacus.</p>
37+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
38+
rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
39+
arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
40+
accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
41+
Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
42+
dapibus elit, id varius sem dui id lacus.</p>
43+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
44+
rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
45+
arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
46+
accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
47+
Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
48+
dapibus elit, id varius sem dui id lacus.</p>
49+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
50+
rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
51+
arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
52+
accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
53+
Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
54+
dapibus elit, id varius sem dui id lacus.</p>
55+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
56+
rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
57+
arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
58+
accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
59+
Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
60+
dapibus elit, id varius sem dui id lacus.</p>
61+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
62+
rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
63+
arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
64+
accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
65+
Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
66+
dapibus elit, id varius sem dui id lacus.</p>
67+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
68+
rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
69+
arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
70+
accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
71+
Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
72+
dapibus elit, id varius sem dui id lacus.</p>
73+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin euismod, purus a euismod
74+
rhoncus, urna ipsum cursus massa, eu dictum tellus justo ac justo. Quisque ullamcorper
75+
arcu nec tortor ullamcorper, vel fermentum justo fermentum. Vivamus sed velit ut elit
76+
accumsan congue ut ut enim. Ut eu justo eu lacus varius gravida ut a tellus. Nulla facilisi.
77+
Integer auctor consectetur ultricies. Fusce feugiat, mi sit amet bibendum viverra, orci leo
78+
dapibus elit, id varius sem dui id lacus.</p>
79+
</body>
80+
</html>
81+
)";
82+
83+
static const size_t htmlContentLength = strlen_P(htmlContent);
84+
85+
static AsyncWebServer server(80);
86+
static AsyncEventSource events("/events");
87+
88+
static volatile size_t requests = 0;
89+
90+
void setup() {
91+
Serial.begin(115200);
92+
93+
Serial.println("============================");
94+
Serial.printf("CONFIG_LWIP_MAX_ACTIVE_TCP %d\n", CONFIG_LWIP_MAX_ACTIVE_TCP);
95+
Serial.println("============================");
96+
97+
WiFi.mode(WIFI_STA);
98+
WiFi.begin("IoT", "");
99+
100+
while (WiFi.status() != WL_CONNECTED) {
101+
delay(500);
102+
Serial.println("Connecting to WiFi...");
103+
}
104+
105+
// HTTP endpoint
106+
//
107+
// > autocannon -c 32 -d 20 -t 30 --renderStatusCodes http://192.168.125.146/
108+
//
109+
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
110+
requests++;
111+
request->send(200, "text/html", (uint8_t *)htmlContent, htmlContentLength);
112+
});
113+
114+
// SSS endpoint
115+
//
116+
// launch 32 concurrent workers for 30 seconds
117+
// > 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;
118+
//
119+
server.addHandler(&events);
120+
121+
server.begin();
122+
}
123+
124+
static uint32_t lastSSE = 0;
125+
static uint32_t deltaSSE = 10;
126+
127+
static uint32_t lastHeap = 0;
128+
129+
void loop() {
130+
uint32_t now = millis();
131+
if (now - lastSSE >= deltaSSE) {
132+
events.send(String("ping-") + now, "heartbeat", now);
133+
lastSSE = millis();
134+
}
135+
136+
#ifdef ESP32
137+
if (now - lastHeap >= 2000) {
138+
Serial.printf("Uptime: %3lu s, requests: %3u, Free heap: %" PRIu32 "\n", millis() / 1000, requests, ESP.getFreeHeap());
139+
lastHeap = now;
140+
}
141+
#endif
142+
}

0 commit comments

Comments
 (0)