mirror of
https://github.com/rstrouse/ESPSomfy-RTS.git
synced 2026-10-31 13:52:15 +01:00
fix: close WebSocket clients whose queue is full
A client that stops reading (a frozen browser tab) keeps its TCP link alive, so neither AsyncTCP's ack timeout nor lwIP ever closes it. With setCloseClientOnQueueFull(false) every message dropped for it printed a warning, and each warning held up loop() for about 10ms on the UART. One such client stayed full for 44 minutes and made every step of loop() slow while shades moved. Closing it frees the queue. The web UI and Home Assistant reconnect and get the full state again from delayInit(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
63c2d180e0
commit
e31eafe255
1 changed files with 6 additions and 1 deletions
|
|
@ -210,7 +210,12 @@ void SocketEmitter::wsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client
|
|||
slots[slot].connectedAt = millis();
|
||||
slots[slot].lastPing = 0;
|
||||
client->text("Connected");
|
||||
client->setCloseClientOnQueueFull(false);
|
||||
// A client that stops reading (a frozen browser tab) keeps its TCP link
|
||||
// up, so nothing else ever closes it, and every message dropped for it
|
||||
// logged a warning that held up loop() for ~10ms. Closing it frees the
|
||||
// queue; the page and Home Assistant reconnect and get the full state
|
||||
// again from delayInit().
|
||||
client->setCloseClientOnQueueFull(true);
|
||||
sockEmit.delayInit(slot);
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue