Evo jeda tema koja mozda nekome nekada moze da zatreba.
Imao sam potrebu da nekoliko RPi-a trebaju da razmenjuju izmedju sebe relativno malu kolicinu podataka (<1KB) ali relativno cesto (do 25 puta u sekundi) u lokalnoj mrezi (nema internet/gateway).
Posle vise pokusaja kako to da resim odlucio sam se da izaberem NGINX (HTTP protokol) koji se pokazao kao uzezetno robustan, pouzdan i veoma veoma brz.
Samo mali podsetnik, NGINX web server gura odprilike 50% kopletnog interneta na svetu ukljucujuci i ovaj nas forum, to je veoma ozbiljno napisan software!
Pre ovoga sam pokusavao da resim to sa *nix soketima, stalna veza koja pljucka te podatke ali se ispostavilo da je prilicno slozeno da se "izhendluju" sve potrebne situacije oko toga, radi ali je sklono zaglupljivanju.
Dakle izbor je pao na NGINX i varijanta da se napravi poseban modul za njega kako bih dobio na brzini procesiranja i to uvezano preko "deljene memorije" (/dev/shm), bez i jednog FILE I/O, dakle da sve radi iz memorije ...
I napravio sam tako, relativno je prosto da se odradi, sve se moze spakovati u jednu C skriptu i jedan konfiguracioni fajl za sam modul.
Naravno neophodno je da osposobite okruzenje za prevodjenje celog NGINX source code-a + instalirati zavisne biblioteke (zlib, OpenSSL opciono, i jos nesto zaboravih sta) i konfigurisati build skriptu da povuce i source za taj nas modul.
Dodatno je potrebno samo podesiti nginx.conf da "slusa" na odredjenoj IP : PORT i postaviti "rutu" da "gadja" nas nov modul.
Na ovoj adresi ima primer sa source-code za "hello_world_module":
https://github.com/perusio/nginx-hello-world-module
E sad, drugi deo price je "klient", sta tu sad staviti ali na srecu tu nisam imao mnogo nedoumica bar kada je HTTP u pitanju i za te potrebe sam iskoristio libCurl, cuvena biblioteka koja je isto jako dugo u upotrebi i to je "proverena stvar", sa tim nema brige.
Zakljucak, NGINX za server i libCurl za klienta radi odlicno. Dobio sam rezultate reda 1-2ms za potrebno vreme procesiranja celog upita (slanje upita i citanje odgovora) sto meni zavrsava posao a oslonio sam se na proverene/poznate biblioteke koje se lako implementiraju.
Koga interesuju vise detalja oko ovoga neka slobodno pita ...
Imao sam potrebu da nekoliko RPi-a trebaju da razmenjuju izmedju sebe relativno malu kolicinu podataka (<1KB) ali relativno cesto (do 25 puta u sekundi) u lokalnoj mrezi (nema internet/gateway).
Posle vise pokusaja kako to da resim odlucio sam se da izaberem NGINX (HTTP protokol) koji se pokazao kao uzezetno robustan, pouzdan i veoma veoma brz.
Samo mali podsetnik, NGINX web server gura odprilike 50% kopletnog interneta na svetu ukljucujuci i ovaj nas forum, to je veoma ozbiljno napisan software!
Pre ovoga sam pokusavao da resim to sa *nix soketima, stalna veza koja pljucka te podatke ali se ispostavilo da je prilicno slozeno da se "izhendluju" sve potrebne situacije oko toga, radi ali je sklono zaglupljivanju.
Dakle izbor je pao na NGINX i varijanta da se napravi poseban modul za njega kako bih dobio na brzini procesiranja i to uvezano preko "deljene memorije" (/dev/shm), bez i jednog FILE I/O, dakle da sve radi iz memorije ...
I napravio sam tako, relativno je prosto da se odradi, sve se moze spakovati u jednu C skriptu i jedan konfiguracioni fajl za sam modul.
Naravno neophodno je da osposobite okruzenje za prevodjenje celog NGINX source code-a + instalirati zavisne biblioteke (zlib, OpenSSL opciono, i jos nesto zaboravih sta) i konfigurisati build skriptu da povuce i source za taj nas modul.
Dodatno je potrebno samo podesiti nginx.conf da "slusa" na odredjenoj IP : PORT i postaviti "rutu" da "gadja" nas nov modul.
Na ovoj adresi ima primer sa source-code za "hello_world_module":
https://github.com/perusio/nginx-hello-world-module
E sad, drugi deo price je "klient", sta tu sad staviti ali na srecu tu nisam imao mnogo nedoumica bar kada je HTTP u pitanju i za te potrebe sam iskoristio libCurl, cuvena biblioteka koja je isto jako dugo u upotrebi i to je "proverena stvar", sa tim nema brige.
Zakljucak, NGINX za server i libCurl za klienta radi odlicno. Dobio sam rezultate reda 1-2ms za potrebno vreme procesiranja celog upita (slanje upita i citanje odgovora) sto meni zavrsava posao a oslonio sam se na proverene/poznate biblioteke koje se lako implementiraju.
Koga interesuju vise detalja oko ovoga neka slobodno pita ...