Problem poruszony w tym poście https://forum.atnel.pl/topic23887.html#p234186. W wielkim skrócie: stos sieciowy tuxgraphics, by design, nakłada ograniczenie na wielkość serwowanych plików. Jest to, odliczając headery HTTP ok 1,2-1,3kB a więc niewiele. Proponowane obejście problemu to podział serwowanej treści na kilka skompresowanych plików oraz pobieranie danych przez XHR z opcjonalnym scedowaniem części przetwarzania na przeglądarkę za pomocą skryptów np. javascript. Sam pomysł nie jest nowatorski, przeciwnie, na obecnych stronach internetowych schemat jest spotykany praktycznie wszędzie. Ponieważ technika pozwala na znaczne ograniczenie wolumenu serwowanych danych oraz odciążenie mikrokontrolera, naturalnym jest wykorzystanie tego w embedded. Poniżej efekty zaimplementowania tego na AVR. Wykonałem taką stronę:
Strona składa się z pliku opisu strony index.html, z pliku stylów style.css oraz kodu javascipt app.js. Pliki są nieco sztucznie napompowane tagami oraz tekstem i każdy z nich przekracza wielkość akceptowaną przez stos tuxgraphics. Pliki są umieszczone w katalogu "html" załącznika więc można je sobie obejrzeć. Następnie pliki zostały skompresowane algorytmem gzip do wielkości akceptowanych przez tuxgraphics. Do skompresowanych plików zostały dodane niezbędne headery HTTP (np. informujące o kompresji i typie MIME). Tak przygotowane pliki zostały dołączone do kodu. Dokładne wielkości oryginalnych i skompresowanych plików są na poniższym zrzucie ekranu (5.kolumna, w bajtach)
Kilka słów o kompresji: w zasadzie serwer http powinien sprawdzać w nagłówkach rządania czy przeglądarka w ogóle akceptuje kompresję i wg. jakiego algorytmu. W razie braku stosownego nagłówka powinien serwować zasób nieskompresowany. Jednakże praktycznie wszystkie obecne przeglądarki obsługują kompresję gzip więc przedstawiona implementacja pomija sprawdzanie. Stos tuxgraphics 5.10 (najnowszy) http://www.tuxgraphics.org/common/src2/article09051/, mikrokontroler atmega328pa modułem ENC28J60. Efekt:
Jak widać strona chodzi doskonale, znacznie lepiej niż się spodziewałem . W ramach szybkich testów, z powodzeniem, wczytałem ją na trzech przeglądarkach jednocześnie. To oczywiście żaden miarodajny test więc mam zamiar poddać układ testom bardziej wymagającym. Spodziewam się uzyskania wyniku co najmniej kilkudziesięciu request/responsów na sekundę . W załączniku załączam większą część kodu więc można to sobie zobaczyć na żywo. Kompilacja wsadu. W Eclipse założyć zwykły projekt AVR na atmega328p (po zmniejszeniu bufora do 723 bajtów można spróbować na m168 albo nawet na m88). Do projektu zaimportować wszystkie pliki z katalogu "webserwer" załącznika. We właściwościach projektu dołączyć bibliotekę "libweb_demo.a" tak jak na poniższym obrazku.
Plik libweb_demo.a zawiera skompresowane pliki strony. Co tam dokładnie jest można sobie obejrzeć poleceniem
To by można było dać od razu do działu DIY forum - w końcu jakiś porządny i mega praktyczny przykład. Bardzo mi się podoba, tym bardziej że ja akurat nie mam żadnej wiedzy o htmlach, javascriptach itp itd
Bardzo fajnie zrobiona stronka aż bym sam chciał się kiedyś nauczyć tworzyć takie podstawowe ładne stronki !
Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości
Nie możesz rozpoczynać nowych wątków Nie możesz odpowiadać w wątkach Nie możesz edytować swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników