Aktywne Wpisy
sosiwoczostkowe +324
W koncu nadszedl ten dzien. Wrocilem z Polszy i zrobilem obiecane zdjecia z Lidlow w krajach Eurokolchozu. Ale nie tak jak obiecalem. Nie zrobilem ich w dwoch, ani w trzech ani czterech, ale az w pieciu krajach: Austrii, Czechach, Francji, Niemczech i Polsce.
Stworzylem tabelke z porownaniem cen. Tylko cztery pierwsze produkty sa porownane w miare obiektywnie: benzyna, nutella, coca cola i pringelsy.
Bylo duzo prosb, ale widzac, ze takie wydawaloby sie najprostsze p--o
Stworzylem tabelke z porownaniem cen. Tylko cztery pierwsze produkty sa porownane w miare obiektywnie: benzyna, nutella, coca cola i pringelsy.
Bylo duzo prosb, ale widzac, ze takie wydawaloby sie najprostsze p--o
źródło: fsghdfghj
Pobierz
smutny_kojot +236
źródło: 20250813_190502
Pobierz




No więc, chciałbym zmodernizować moją funkcję, aby zbierać dane z logów i następnie wysłać je wszystkie do przeglądarki. Najpierw próbowałem funkcji beginResponseStream, ale moja tablica jest zbyt duża, aby można ją było wysłać raz (tablica ma 300 wierszy i każdy wiersz ma 100 wartości typu char). W efekcie tym, do przeglądarki trafia jakieś 50 wierzysz (może to być problem z małą ilością wolnej pamięci heap. Czytałem na wielu stronach internetowych, że najlepszą metodą wysyłania dużych danych jest używanie chunków (kawałków), aby zminimalizować wykorzystanie pamięci heap (której w moim przypadku mam bardzo mało, bo tylko 5-10KB).
W zasadzie to od ok. 7 dni próbuję przepisać swój kod z wykorzystaniem beginChunkedResponse(), ale za każdym razem bez powodzenia. W związku z tym, prosiłbym o pomoc w napisaniu kodu. Najlepszym rozwiązaniem według mnie byłaby możliwość, aby chunki były wysyłane co np. 20 wierszy z tablicy. Jeśli to rozwiązanie ma wady i nie jest wydajne, chętnie posłucham rad, gdyż pierwszy raz używam tej metody.
Mój poprzedni kod wygląda tak:
server.on("/logs1", HTTP_GET, [](AsyncWebServerRequest *request){AsyncResponseStream *response = request->beginResponseStream("text/plain; charset=UTF-8");
for (int z = 0; z < iloscLogow; z++){
response->print(logs[z]);
response->print("\n");
}
request->send(response);
});
Natomiast metoda ma podstawową postać:
server.on("/ten", HTTP_GET, [](AsyncWebServerRequest *request){
AsyncWebServerResponse *response = request->beginChunkedResponse("text/html; charset=UTF-8", [](uint8_t *buffer, size_t maxlen, size_t index) -> size_t {
});
request->send(response);
// response->addHeader("Access-Control-Allow-Origin", "*");
// response->addHeader("Access-Control-Allow-Methods", "GET");
// response->addHeader("Access-Control-Allow-Headers", "Content-Type");
// response->addHeader("Access-Control-Max-Age", "86400");
// response->addHeader("Cache-Control", "no-cache");
// response->addHeader("Connection", "keep-alive");
});
#mikrokontrolery #esp8266 #nodemcu #arduino #programowanie #jezykc #c #elektronika @zetisdead
Komentarz usunięty przez autora
size_t, a to dodatkowo są chyba pointery, z którymi nie za bardzo się lubię. Nie wiem jak to zrobić prosto i efektywnie.Poza tym, mam rozbudowany układ zrobiony pod piny z ESP8266, więc ESP32 nie wchodzi w grę.