abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 18:44 | IT novinky

    Vojenské zpravodajství (VZ) se v březnu zapojilo do mezinárodní operace proti aktivitám hackerské skupiny APT28, která je spojovaná s ruskou vojenskou zpravodajskou službou GRU a která přes slabě zabezpečené routery prováděla kybernetické útoky na státní a další organizace v ČR i zahraničí. Operaci vedl americký Federální úřad pro vyšetřování (FBI) a jejím cílem bylo odebrat útočníkům přístup k napadeným zařízením a ty následně … více »

    Ladislav Hagara | Komentářů: 3
    včera 16:44 | IT novinky

    Tvůrcem nejpopulárnější kryptoměny bitcoin, který se skrývá za pseudonymem Satoši Nakamoto (Satoshi Nakamoto), je britský kryptograf Adam Back. Na základě vlastní investigativní práce to tvrdí americký deník The New York Times (NYT). Několik indicií podle autorů jasně ukazuje na to, že Back a Nakamoto jsou stejný člověk. Jde mimo jiné o podobný odborný a osobnostní profil či totožné chyby a manýry v psaném projevu.

    Ladislav Hagara | Komentářů: 6
    včera 14:44 | Nová verze

    Google Chrome 147 byl prohlášen za stabilní. Nejnovější stabilní verze 147.0.7727.55 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Vylepšeny byly také nástroje pro vývojáře. Přehled novinek v Chrome DevTools 145 až 147 také na YouTube.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Nová verze

    Vývojáři z Laboratoří CZ.NIC vydali nové verze aplikací Datovka (Datovka 4.29.0, Mobilní Datovka 2.6.2). V případě desktopové verze přibyly možnosti projít všechny uložené zprávy, zkontrolovat časy expirací časových razítek a přerazítkovat datové zprávy, které lze v ISDS přerazítkovat. Novinkou je také možnost vytahovat myší ze seznamu ZFO soubory datových zpráv, tento úkon jde udělat i pomocí tlačítek Ctrl+C. Nová verze Mobilní Datovky přináší jen drobné úpravy.

    VSladek | Komentářů: 0
    7.4. 21:55 | Nová verze

    MicroPython (Wikipedie), tj. implementace Pythonu 3 optimalizovaná pro jednočipové počítače, byl vydán ve verzi 1.28.0. Z novinek lze vypíchnout novou třídu machine.CAN.

    Ladislav Hagara | Komentářů: 0
    7.4. 10:22 | Komunita

    Michael Meeks, CEO společnosti Collabora, na apríla oznámil, nebyl to ale apríl, že nadace The Document Foundation zastřešující vývoj kancelářského balíku LibreOffice vyloučila ze svých řad všechny zaměstnance a partnery společnosti Collabora, tj. více než třicet lidí, kteří po mnoho let přispívali do LibreOffice. Nadace The Document Foundation po několika dnech publikovala oficiální vyjádření. Přiznává pochybení při zakládání

    … více »
    Ladislav Hagara | Komentářů: 9
    6.4. 05:33 | Pozvánky

    Protože je už po aprílu, můžou strahováci opět zveřejnit program další Virtuální Bastlírny, aniž by připravená témata působila dojmem, že jde o žert. Vězte tedy, že v úterý 14. dubna (změna!!!) od 20:00 proběhne VB, kde se setkají bastlíři, technici, učitelé i nadšenci do techniky a kde i vy se můžete zapojit do družného hovoru, jako by všichni seděli u pomyslného piva. Co mají bastlíři tento měsíc na srdci? Pravděpodobně by nás musel zasáhnout

    … více »
    bkralik | Komentářů: 3
    5.4. 23:33 | Nová verze

    Byla vydána verze 26.1 aneb čtvrtletní aktualizace open source počítačového planetária Stellarium (Wikipedie, GitHub). Vyzkoušet lze webovou verzi Stellaria na Stellarium Web.

    Ladislav Hagara | Komentářů: 1
    5.4. 23:00 | Zajímavý projekt

    VOID (Video Object and Interaction Deletion) je nový open-source VLM model pro editaci videa, který dokáže z videí odstraňovat objekty včetně všech jejich fyzikálních interakcí v rámci scény (pády, kolize, stíny...) pomocí quadmaskingu (čtyřhodnotová maska, která člení pixely scény do čtyř kategorií: objekt určený k odstranění, překrývající se oblasti, objektem ovlivněné oblasti a pozadí scény) a dvoufázového inpaintingu. Za projektem stojí výzkumníci ze společnosti Netflix.

    NUKE GAZA! 🎆 | Komentářů: 8
    5.4. 05:22 | Zajímavý software

    Design (GitHub) je 2D CAD pro GNOME. Instalovat lze i z Flathubu. Běží také ve webovém prohlížeči.

    Ladislav Hagara | Komentářů: 20
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (7%)
     (1%)
     (12%)
     (30%)
     (3%)
     (6%)
     (1%)
     (14%)
     (24%)
    Celkem 1245 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    HTTP server pro C++ a Qt

    2.3.2015 06:30 | Přečteno: 1734× | Počítače | Výběrový blog | poslední úprava: 2.3.2015 06:24

    V článku se popisuje jednovláknový embedded http server postavený nad knihovnou Qt. Originál článku včetně dokumentace vyšel na našem webu: Hobrasoft.cz

    Poděkování

    Http server, který zde popisuji, je založený na tomto projektu, autorem je Stefan Frings:
    http://stefanfrings.de/qtwebapp/index-en.html.
    Tímto bych rád autorovi poděkoval.

    Odkazy

    Koukněte se, jak to běhá
    Dokumentace
    Download

    Proč jiný server?

    Pro jeden z našich projektů jsem hledal nějaký vhodný webový server. První nápad byl samozřejmě server QtWebapp, už s ním mám většinou dobré zkušenosti z jiného projektu: Fotobot. Ale už v prvním projektu jsem narazil na některé nepříjemné vlastnosti: parametry se v mnoha místech předávají jako reference (ač reference je skoro totéž, co odkaz, není to tak docela odkaz), server je vícevláknový a počet vláken je předem daný v konfiguračním souboru. Omezení počtu vláken dělalo občas problémy už v prvním projektu, v dalším projektu se daly očekávat problémy řádově horší.

    Vyzkoušeli jsme i jiný http server, ale tam jsme na vícevláknovost a omezený počet vláken narazili taky.

    Aby to nevypadalo, že mám něco proti vícevláknovým aplikacím - ne tak docela. Ale Qt je knihovna hodně orientovaná na událostní zpracování, a pokud je celá aplikace řízená událostmi, je vícevláknový web server zbytečná komplikace (je nutné začít zamykat a podobně).

    Lidé na internetu opisují nápady jeden od druhého. Apache jednou ukázal cestu, které se nyní lidé drží zuby nehty, a když je Apache takto úspěšný, nelze přeci udělat chybu, když se pro další servery zvolí podobné řešení. Použitelný jednovláknový server jsme nenašli.

    Naštěstí jsou tady servery jako je Nginx, Lightttpd a HobrasoftHttpd.

    Požadavky na server

    Embedded

    Spousta našich aplikací běží v prostředí malých ARM počítačů BeagleBone. Je nesmysl psát v C++ malinké rutiny pro bitové žonglování s jednotlivými vývody procesoru a pro publikaci výsledků pak použít kombajn typu Apache a PHP. I když Apache na BeagleBone samozřejmě chodí, chceme mít celé prostředí jednoduché, včetně instalace. Ideální instalace vypadá takto:

    apt-get install fotobot
    

    Nechce se mi psát sáhodlouhé návody "Apache nakonfigureje takto: 1. apt-get... 2. cd /etc/apache2/vhost.conf... 3. vi default_vhost.conf.... 99. /etc/init.d/apache restart".

    Windows

    Napsat podrobný návod na instalaci si dovedu představit, pokud je cílovou skupinou zkušený linuxový administrátor nebo můj vlastní zaměstanec. Ale nedovedu si představit, že bych vyráběl produkt, který by měl poskytovat nějaké informace přes HTTP rozhraní na Windows a nemohl bych použít embedded http server. Instalace na Windows spočívá v klikání na "Další... další... další..." a přes to vlak nejede.

    Neomezený počet spojení

    Aplikace, které poslední dobou děláme, otevírají na každé stránce hned několik spojení a nepouštějí je. Dokud je stránka v prohlížeči aktivní, je otevřené i spojení. Deset vláken je málo - s deseti vlákny zablokuje webový server už druhý uživatel. (Neomezený počet spojení mě samozřejmě přejde - hned jak mi někdo položí server ;-)

    Jednovláknový

    V jednovláknové aplikaci chci používat jednovláknový http server. Více vláken vede k zamykání, kód se stává složitějším a náchylnějším k chybám - jeden chybějící mutex v kritickém místě dovede klidně shodit aplikaci, v horším případě pak i vyrobit nesmysly v datech.

    Řízený událostmi

    Knihovna Qt je řízená událostmi. I když psaní vícevláknových aplikací je v Qt snadné, psaní aplikací řízených událostmi je snazší. Nechci se ubírat trnitými cestami, pokud existuje asfaltka.

    Jak to používat

    Stačí-li vám servírovat pouze statický obsah, je použití serveru ve vašem vlastním kódu takto jednoduché:

    #include <QCoreApplication>
    #include "httpd.h"
    using namespace HobrasoftHttpd;
    int main(int argc, char *argv[]) {
        QCoreApplication app(argc, argv);
        new HttpServer(0); // Server can serve static file from current directory
        return app.exec();
    }
    

    Konfigurace celého serveru je obsažená v samostatné třídě, načítá se z klasického objektu třídy QSettings. Pokud chcete použít jiný konfigurační soubor, můžete to udělat třeba takto:

        QSettings qsettings("/etc/http.conf", QSettings::IniFormat);
        HttpSettings settings(&qsettings, 0);
        new HttpServer(&settings,0);
    

    Pokud potřebujete, aby vaše aplikace generovala obsah dynamicky, musíte rozšířit třídu HttpServer a reimplementovat metodu HttpServer::requestHandler() tak, aby vracela ukazatel na váš vlastní request mapper:

    #include "httpserver.h"
    #include "httprequesthandler.h"
    #include "myclass.h"
    
    using namespace HobrasoftHttpd;
    
    class RequestMapper : public HttpRequestHandler {
        Q_OBJECT
      public:
        RequestMapper(HttpConnection *parent);
        void service(HttpRequest *request, HttpResponse *response) {
            if (request->path().startsWith("/my-function")) {
                HttpRequestHandler controller = new MyClass(connection());
                controller->service(request, response);
                return;
                }
            // call default handler - static html pages, shtml pages, images, javascript, styles...
            HttpRequestHandler::service(request, response);
            }
    };
    
    class MyHttpd : public HttpServer {
        Q_OBJECT
      public:
        Httpd(QObject *parent) : QObject(parent) { }
        // The method returns pointer to new instance of your own request mapper
        // The request mapper maps requests like "/my-function" to call your own classes
        HttpRequestHandler *requestHandler(HttpConnection *connection) {
            return new RequestMapper(connection);
            }
    };
    

    Více se dočtete v dokumentaci: http://www.hobrasoft.cz/en/httpserver/doc/

    Součástí balíku ke stažení je i zdokumentovaný příklad - doporučuji prostudovat třídu AbstractController a její použití. Tato třída vám dovolí snadno implementovat velmi častou třídu úloh:

    Celá třída komunikuje přes JSON, změny se předávají přes HTML5 proudy událostí.

           

    Hodnocení: 89 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    2.3.2015 11:43 ET
    Rozbalit Rozbalit vše Re: HTTP server pro C++ a Qt
    nejsem programator (a neber to nikterak spatne), ale neni QT a embedded ( male ARM PC BeagleBone) protimluv?

    viz. Qt is a cross-platform application and UI framework for developers using C++ or QML, a CSS & JavaScript like language. zdroj

    2.3.2015 12:09 victor8 | skóre: 24 | blog: blog | Košice
    Rozbalit Rozbalit vše Re: HTTP server pro C++ a Qt
    Urcite nie.

    Nas lokalny IPTV provider v tom ma napr. napisane komplet cele GUI jeho STB, a funguje im to :)
    2.3.2015 12:34 luky
    Rozbalit Rozbalit vše Re: HTTP server pro C++ a Qt
    QT neni jedna knihovna, ale skupina knihoven, takze to, co neni potreba (GUI atd.) se nemusi vubec instalovat.
    2.3.2015 12:49 ET
    Rozbalit Rozbalit vše Re: HTTP server pro C++ a Qt
    ok, jen mi to prislo (tak jak ja chapu QT) jako kanon na vrabce, paklize vyhovuje a lze to osekat, tak proc ne ;)
    Josef Kufner avatar 3.3.2015 01:12 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: HTTP server pro C++ a Qt
    Ono to není o tom Qt osekat, ale o tom nepoužít modul QtGui.

    Jinak velikost Qt je v rozsáhlosti, nikoliv v náročnosti. Když se podíváš na zdrojáky, kódy jednotlivých komponent jsou povětšinou celkem krátké a nenáročné, narozdíl od mnoha jiných knihoven.
    Hello world ! Segmentation fault (core dumped)
    Petr Bravenec avatar 2.3.2015 12:56 Petr Bravenec | skóre: 43 | blog: Bravenec
    Rozbalit Rozbalit vše Re: HTTP server pro C++ a Qt
    Qt a embedded rozhodně není protimluv.

    Jak už kdosi uvedl, je Qt hodně modulární. Mám aplikace, kde vůbec nepoužívám GUI, pouze uvedený webový server. Mám jiné aplikace, které GUI mají - je zde knoflík "Spustit import" a vevnitř je webový klient postavený na webkitu a importuje data ze stránky plné javascriptu. Kdybych nahradil dnešní GUI webovým serverem a nacpal to na Beaglebone, je z toho embedded aplikace. Beaglebone to v pohodě utáhne (ale není pro to důvod, běží to na běžném PC s velikou databází za zadkem na samostatném serveru).

    Qt může být hodně nenáročné a hodně usnadňuje práci. Samozřejmě na ARM-M0 to asi nepojede... ale to je zase jiná level "embedded" aplikací.
    Petr Bravenec - Hobrasoft s.r.o.
    2.3.2015 13:02 ET
    Rozbalit Rozbalit vše Re: HTTP server pro C++ a Qt
    jo diky za vysvetleni, viz vyse - tak at to slape ;)
    mirec avatar 2.3.2015 13:03 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: HTTP server pro C++ a Qt

    Na embedded je to pomerne rýchle. Ja vyvíjam vo voľnom čase pre malé ARM dosky - ukážka virtuálnej klávesnice. Kompletný boot je pomerne rýchly (bootovať začína až od výpisu starting kernel, dovtedy je tam bootloader s nejakým timeoutom nech to môžem zastaviť a nabootovať zo siete keď niečo pokašlem). Obraz disku s meulátorom aj kompletným Qt a tonou zbytočností aby sa mi na tom dobre vyvíjalo má cca 40MB.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    vlastikroot avatar 2.3.2015 17:06 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: HTTP server pro C++ a Qt
    QML je nejlepsi vec na embedded GUI, co jsem kdy videl. Javascript rulezz :-D
    We will destroys the Christian's legion ... and the cross, will be inverted
    Rezza avatar 2.3.2015 17:22 Rezza | skóre: 25 | blog: rezza | Brno
    Rozbalit Rozbalit vše Re: HTTP server pro C++ a Qt
    Na rozdeleni zacala delat jeste Nokia, kdy prave Qt potrebovali dostat do low end zarizeni. Takze dneska je celkem slusne modularni. Na podobne veci je Qt Network super.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.