eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingEmbedded HTTP Server › Re: Embedded HTTP Server
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin.stu.neva.r
    u!paganini.bofh.team!eternal-september.org!feeder.eternal-september.org!reader0
    1.eternal-september.org!.POSTED!not-for-mail
    From: heby <h...@p...onet.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Embedded HTTP Server
    Date: Sun, 7 Jun 2020 00:36:28 +0200
    Organization: A noiseless patient Spider
    Lines: 55
    Message-ID: <rbh5pi$gkn$1@dont-email.me>
    References: <d...@g...com>
    <rbg2hb$ebs$1@dont-email.me>
    <4...@g...com>
    <rbgtv9$vuf$1@dont-email.me>
    <6...@g...com>
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    Injection-Date: Sat, 6 Jun 2020 22:36:35 -0000 (UTC)
    Injection-Info: reader02.eternal-september.org;
    posting-host="4428fb7b26fb46f2259069e630c46c28";
    logging-data="17047";
    mail-complaints-to="a...@e...org";
    posting-account="U2FsdGVkX18Wf+Ps8LqKsIJktk6jDfij"
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101
    Thunderbird/68.8.1
    Cancel-Lock: sha1:jo6juAd9FqNGh5TlnVl5WnuvSPA=
    In-Reply-To: <6...@g...com>
    Content-Language: en-US
    Xref: news-archive.icm.edu.pl pl.comp.programming:214952
    [ ukryj nagłówki ]

    On 07/06/2020 00:02, Maciej Sobczak wrote:
    > Szkoda prądu. Przecież to jest open-source. Jak ktoś bedzie chciał wymienić
    standardowe wątki na jakieś inne, to zmienia dosłownie w jednym miejscu to:
    > std::thread th(connection_thread, sock);
    > na co tam potrzebuje, no i może jeszcze sygnaturę wołanej funkcji. Robienie
    abstrakcji na coś, co jest w jednej linijce, jest po prostu niepotrzebne. Łatwiej
    zmienić tą jedną linijkę.

    Niby tak, ale już cooperative tak nie obskoczysz.

    Ponadto praktyka pozkauje że zmiana "jednej linijki" w biblitece nie
    jest prawidłową metodą dopasowania się do czegoś bo za chwile tej
    linijki nie będzie w wersji 0.9.3.

    > A jeszcze łatwiej zauważyć, że std::thread już jest tą abstrakcją - właśnie
    abstrakcją czegoś natywnego, bez narzucania konkretnego rozwiązania. I dokładnie taki
    jest sens istnienia tej klasy w std::. Więc jest też opcja podstawienia innej
    implementacji tejże standardowej klasy.

    To tylko łatwo w teorii, w normalnych systemach "podmienianie"
    std::whatever to jest *gruby* hacking...

    > Znowu - prawdziwy cyrk to stos TCP. To tam są smoki. Przerobienie tego serwera na
    inne wątki to pikuś, ale przestawienie go na inny stos - i to tak, żeby zachować
    abstrakcję IOStreams (które są z założenia *blokujące*), to już zupełnie inna zabawa.

    Niby tak, ale znowu: co dziwnego w tym że robisz własną abstrakcję do
    "ich" abstrakcji?

    Tworzysz własny ITcpStream i jakiś adapter do istniejącego/ych. Jak
    IOStreams masz blokujace to masz adapter z wątkami. Jak się da robić
    pooling, to masz inny adapter bez wątków albo z wątkami. Co kto potrzebuje.

    Piszesz rdzeń HTTP w oderwaniu kompletnym od tego jaki stos TCP używasz.
    Definiujesz jakieś ITCP, ISTream, IConnection i potem martwisz się w
    napisanie kilku adapterów do tego albo do siamtego rozwiązania.

    I przy okazji unit testy wychodzą za friko.

    >> brakuje bibliotek w logiką na cooroutines,
    > To jest ciekawa uwaga. Pytanie, czy takie podejście ma swoją niszę rynkową, w
    której mieści się taki przykładowy serwer HTTP.

    Owszem, takie event-based są. To nie dokładnie to co coroutines, ale blisko.

    > Bo ja nie jestem przekonany, czy zawsze cały program trzeba robić jedną metodą.

    Dlatego sugeruje nie zmuszać ludzi do preemptive wątków. Wątki narzucają
    pewne rozwiązania logiki w kodzie w sposób intruzywny, np. bez wątków w
    jakiejś biblitece nie musisz synchronizować danych, ale np. ponieważ
    ktoś w jakiejś biblitece użył wątków to nagle w zupełnie niewątkowym
    kodzie masz race conditions bo się jakiś callback wywołał.

    > Może raczej jest tak, że np. komunikację z urządzeniami fizycznymi można zrobić na
    coroutinach

    Tam własnie nie, raczej na przerwaniach które, jak się zamknie jedno
    oko, to są takie prawie wątki.

    >, ale interfejsu użytkownika już nie warto.

    *wszystkie* interfejsy GUI jakie istnieją w sensownym zastosowaniu są
    event-based czyli takie coroutines/cooperative.

    Chyba że masz na myślie coś innego niż GUI.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: