Черновик асинхронного GET/POST для micropython
Это скорее черновик, если кратко, имеем ESP32-S, PSRAM нет, прошита микропитоном esp32-idf3-20200902-v1.13.bin.
Появилась необходимость использовать методы GET и POST для отправки/получения данных на сервер асинхронно вместе с другими циклами, да ещё с ssl.
И при этом контролировать таймауты в зависимости от важности того или иного подключения.
Готовые варианты или не помещались в память, или как uaiohttpclient.py не поддерживали https.
В итоге получилась примерно такая (как-бы асинхронная) зарисовка на салфетке:
ahttp.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | |
ping.py
uping2.py отличается от оригинала только строкой:
Проверяем таймауты
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Ловим и держим
Простой вариант симуляции, когда сервер отвечает, но не закрывает соединение
Лог консоли:
Вариант с нормальным закрытием соединения со стороны сервера
Замедляем интернет
esp <-> роутер <-> ноутбук с сервером, поэтому тормозим wlan0 на ноутбуке.
Используем Linux Traffic Control tc
И устанавливаем 5 секунд tc qdisc add dev wlan0 root netem delay 5000ms
Ответ получен:
Устанавливаем 20 секунд tc qdisc add dev wlan0 root netem delay 20000ms