Jeden nebo vice IP portu?
Martin Záruba
swz na volny.cz
Pátek Duben 22 20:47:56 CEST 2016
Dík, na codetyphon se podívám.
Přiznám se, že už nemám sil učit se zvláštnosti céčka. Možná je
vhodnější, netroufám si to posuzovat.
Když jsem začal vyvíjet klietskou část programu pro komunikaci s řídící
jednotkou, byla samozřejmě napsaná jako jedno vlákno, komunikovala přes
seriový port, zapisovala na disk a kreslila grafy. Na to mi Lazarus
připadal docela vyhovující. Trochu byl problém uhlídat, aby aplikace
nezamrzala při přerušení spojení přes sériový port, ale byl to jen kus
kabelu a jeden port, tak to ještě šlo. Nejprve jsem program používal jen
já tak, že se prostě kabel připojil do řídící jednotky a viděl jsem co
to dělá. Jenže jak jsem chtěl, aby program používal i topenář, který
tepelné čerpadlo smontoval a ukázalo se, že ač je program docela
přívětivý, pro mnohé to bylo nad jejich síly. Takže vymyslet, abych i já
o 100km dál viděl co mu to tam dělá a mohl poradit. Tak vznikla potřeba
retranslace. K dispozici ovšem bylo často jen prabídné připojení k
internetu přes AP na jeho mobilu. Není proto asi jiná možnost, než že se
připojí k našemu serveru. Tím už měl program 3 asynchronní funkce: 1)
komunikace s uživatelem, 2) komunikace s řídící jednotkou, 3) přenos
přes internet. Když jsem se to snažil uchodit klasickým programem (bez
vláken), téměř to již nešlo, program byl prorostlý příkazy
Application.ProcessMessages, waity, čekacími smyčkami a dusilo to
procesor. Pochopit výrazně odlišnou logiku programu s vlákny mi dalo
docela zabrat, ale nakonec se povedlo a program je i přehlednější.
Zatížení procesoru spadlo téměř na nulu. Schválně jsem vyhrabal prastarý
počítač s 486 a W95. Kupodivu fungoval a když jsem na něm program
spustil, chodil úplně normální rychlostí. Takže můj závěr je, že pokud
je k tomu důvod, stojí za to pochopit logiku programování vláken.
Martin Záruba
Dne 22.4.2016 v 20:20 Zdeněk Aster napsal(a):
> Přiznám se, že ač odchovaný pascalem a pod windows, nic jiné
> neumím, tak v případě Linuxu a systémové věci, takovéhoto serveru
> bych šáhnul po céčku v linuxu mi to tak nějak nevadí a patří to k
> němu, ale ve windowsích to je pro mě španělská vesnice.
> Ale pravda, že kdybych měl dělat něco grafického komunikace s uživatelem
> v linuxu tak asi by to skončilo u toho lazarusu :-)
> Jinak klidně mrkněte na ten codetyphon, je to celý lazarus (vše co
> jste měl
> v Lazarusu by tam mělo jít přeložit), ale je tam přidáno spousty knihoven
> a člověk to nemusí řešit sám.
>
> Zdeněk Aster
>
> ---------- Původní zpráva ----------
> Od: Martin Záruba <swz na volny.cz>
> Komu: HW-news <hw-list na list.hw.cz>
> Datum: 22. 4. 2016 17:11:41
> Předmět: Re: Jeden nebo vice IP portu?
>
>
> Ano. Já ve skutečnosti také používám Lazarus (dokonce na Vaše
> doporučení
> před pár lety). Byl jsem ale přesvědčen, že více lidí bude znát
> Delphi.
> Ty rozdíly jsou opravdu malé. Pokud se nemýlím, tak Lazarus
> existuje i
> pro Linux, který mě stále více láká.
>
> Martin Záruba
>
> Dne 22.4.2016 v 16:00 Zdeněk Aster napsal(a):
> > Jinak jen informace nevím jak to máte s Delphi,
> > ale já kdysi přešel na Lazarus, respektive na odnož
> > CodeTyphoon http://www.pilotlogic.com/sitejoom/index.php/codetyphon
> >
> > A jsem hodně spokojen na těch pár věcí co potřebuji mi to
> > bohatě stačí. Je to hodně podobné jak Delphi.
> >
> > Zdeněk Aster
> >
> > ---------- Původní zpráva ----------
> > Od: Martin Záruba <swz na volny.cz>
> > Komu: HW-news <hw-list na list.hw.cz>
> > Datum: 22. 4. 2016 14:59:33
> > Předmět: Re: Jeden nebo vice IP portu?
> >
> >
> > Dik, podívam se na to.
> >
> > Martin Záruba
> >
> > Dne 22.4.2016 v 14:07 Ondřej Janovský napsal(a):
> > > A co http://www.indyproject.org/index.en.aspx ? Nehodilo by se to?
> > >
> > > On 04/22/2016 11:10, Martin Záruba wrote:
> > >> Buď to já neumím, nebo to nejde. V podstatě mám možnost na
> socketu
> > >> vyvolat např. RecvByte, kde mohu uvést jak dlouho má čekat.
> Pak se
> > >> řízení vrátí systému dokud nepřijdou data nebo neprojde Timeout.
> > >> Druhou možností je vyvolat WaitingData, kde se dozvím, zda jsou
> > >> nějaká data, ale pokud nejsou a budu jej volat ve smyčce, zadusím
> > >> procesor. Pokud dám do smyčky delay, bude se dít to, že data vždy
> > >> budou čekat, dokud prodleva nezkončí. Ale to by asi fungovalo.
> > >>
> > >> Martin Záruba
> > >>
> > >> Dne 22.4.2016 v 10:58 Ladislav Vaiz napsal(a):
> > >>> Unixová klasika je jeden velký select(), který čeká na data
> > jak ze
> > >>> standardního vstupu tak ze soketů všech druhů.
> > >>> Se smyčkou obsluhy zpráv se to asi moc nesnáší, ale ten
> select by
> > >>> mohl být v druhém vlákně. Celkem tedy jedno vlákno pro GUI,
> druhé
> > >>> pro select.
> > >>> Delfi ale neznám a nevím, zda poskytují přístup k selectu.
> > >>> L.
> > >>>
> > >>> Martin Záruba napsal(a):
> > >>>> No jo, ale jak to jinak udělat, když naprostou většinu doby
> > čekáte,
> > >>>> až přijde odpověď. V té době se řízení vrátí systému.
> > >>>> Druhou možností by bylo stále testovat, zda již nějaká data
> > >>>> nepřišla, ale to bude strašně dusit procesor. Proto mi ty
> > thready,
> > >>>> které vlastně stále jen čekají, připadalo jako elegantní
> řešení.
> > >>>>
> > >>>> Martin Záruba
> > >>>>
> > >>>> Dne 22.4.2016 v 10:05 Ondřej Janovský napsal(a):
> > >>>>> U nás jsme to doteď psali v Javě, teď jsme zkusili Node.js pro
> > >>>>> menší projekty. Výhodou je, že je dostatek frameworků (dokonce
> > >>>>> kvalitních).
> > >>>>>
> > >>>>> S Delphi nevím. Ale pokud by to mělo mít 1000 aktivních
> > zařízení,
> > >>>>> pak bych šel jinou cestou než 1000 threadů.
> > >>>>>
> > >>>>> Oja
> > >>>>>
> > >>>>>
> > >>>>> On 04/22/2016 09:23, Martin Záruba wrote:
> > >>>>>> V podstatě spojení je jen "přes data".
> > >>>>>>
> > >>>>>> 1) Řídící jednotka se aktivně připojí k serveru, aby
> > nemusela mít
> > >>>>>> veřejnou IP, ale pak čeká.
> > >>>>>>
> > >>>>>> a) Server pošle dotaz, řídící jednotka odpoví, server uloží
> > data
> > >>>>>> na disk. To se stále v intervalu cca 10 vteřin opakuje.
> > Jedná se
> > >>>>>> tedy v tomto případě o prostý sběr dat.
> > >>>>>> b) Server pošle povel z fronty povelů (bod 2b dále), řídící
> > >>>>>> jednotka jej provede a odpoví jak jej provedla. Povel se z
> > fronty
> > >>>>>> smaže. Povely jsou několik byte a jsou velmi řídké.
> > >>>>>>
> > >>>>>> 2) Klient se aktivně připojí k serveru, aby nemusel mít
> > veřejnou IP.
> > >>>>>> a) Pošle požadavek na data, server je najde v souboru a
> > pošle mu je.
> > >>>>>> b) Pošle povel. Server jej uloží do fronty čekajících povelů.
> > >>>>>>
> > >>>>>> Chci to psát v Delphi. Asi existují vhodnější prostředí,
> > ale toto
> > >>>>>> snad celkem slušně znám.
> > >>>>>>
> > >>>>>> Martin Záruba
> > >>>>>>
> > >>>>>> Dne 22.4.2016 v 9:06 Ondřej Janovský napsal(a):
> > >>>>>>> Mohu to chápat, že klient je propojen přímo s řídící
> > jednotkou?
> > >>>>>>> Tedy, že server je v podstatě ICQ, JABBER, WhatsUp pro
> > >>>>>>> komunikaci s řídícími jednotkami?
> > >>>>>>>
> > >>>>>>> A v čem to chcete psát?
> > >>>>>>>
> > >>>>>>> Oja
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> On 04/22/2016 08:58, Martin Záruba wrote:
> > >>>>>>>> Zpočátku cca 10, ale konečný stav by mohl být okolo 1000.
> > >>>>>>>> V naprosté většině k jedné řídící jednotce bude
> připojen jen
> > >>>>>>>> jeden klient, ale může jich být i více (2 až 3), naopak
> > často
> > >>>>>>>> nebude žádný, t.j. server bude jen zapisovat přijatá data,
> > >>>>>>>> řídící jednotky jsou zcela autonomní. Dat ja ale poměrně
> > málo,
> > >>>>>>>> cca 100byte za vteřinu. Musí to přijatelně chodit i s velmi
> > >>>>>>>> pomalým připojením (přes mobil, který dělá AP a často v
> > místech
> > >>>>>>>> kde funguje jen GPRS). Zkoušel jsem přenos, kdy
> notebook byl
> > >>>>>>>> připojen k internetu přes mobil s EDGE a 5x přenos na
> > normální
> > >>>>>>>> PC a zpět. Latence byla strašlivá, ale chodilo to bez chyb,
> > >>>>>>>> rychlost v mém případě je naprosto nevýznamná.
> > >>>>>>>>
> > >>>>>>>> Martin Záruba
> > >>>>>>>>
> > >>>>>>>> Dne 22.4.2016 v 8:41 Ondřej Janovský napsal(a):
> > >>>>>>>>> Kolik očekáváte řídících jednotek a kolik klientů? Jak
> > masivní
> > >>>>>>>>> komunikaci?
> > >>>>>>>>> A v čem to budete psát?
> > >>>>>>>>>
> > >>>>>>>>> Existuje ještě cesta, kterou jde Node.js, Vert.x.
> > >>>>>>>>>
> > >>>>>>>>> Oja
> > >>>>>>>>>
> > >>>>>>>>> On 04/22/2016 06:15, Martin Záruba wrote:
> > >>>>>>>>>> Díky všem za rady. Udělám dva porty, jeden pro řídící
> > >>>>>>>>>> jednotky a jeden pro klienty.
> > >>>>>>>>>> Ještě bych se rád zeptal, zda myslíte, zda udělat
> > jednodušší
> > >>>>>>>>>> variantu, t.j.:
> > >>>>>>>>>> 1) Někdo se připojí, vytvoří se vlákno, v něm se vytvoří
> > >>>>>>>>>> socket, otevře se, udělá se co je třeba, zavře se socket,
> > >>>>>>>>>> zruší se socket, ukončí a odstraní se vlákno.
> > >>>>>>>>>> nebo
> > >>>>>>>>>> 2a) Někdo se připojí, vytvoří se vlákno, v něm se vytvoří
> > >>>>>>>>>> socket, otevře se, udělá se co je třeba, zavře se
> > >>>>>>>>>> socket,vlákno se uspí.
> > >>>>>>>>>> 2b) Někdo se připojí, pokud existuje uspané vlákno
> probudí
> > >>>>>>>>>> se, otevře se socket,udělá se co je třeba, zavře se
> > >>>>>>>>>> socket,vlákno se uspí. Pokud neexistuje volné vlákno,
> > pak 2a)
> > >>>>>>>>>>
> > >>>>>>>>>> Ve variantě 2) by se nemuselo stále vytvářet a rušit
> > vlákno,
> > >>>>>>>>>> ale je to složitější. Nedovedu posoudit, jak náročné je
> > >>>>>>>>>> vytvořit a zrušit vlákno a zda se vyplatí tento krok
> > dělat co
> > >>>>>>>>>> nejméně.
> > >>>>>>>>>>
> > >>>>>>>>>> Martin Záruba
> > >>>>>>>>>>
> > >>>>>>>>>> Dne 21.4.2016 v 15:20 Radek Benedikt napsal(a):
> > >>>>>>>>>>> Z hlediska SW je asi jeden port "hezci" ale ma to jedno
> > >>>>>>>>>>> velke ALE. Hodne
> > >>>>>>>>>>> spatne se to filtruje, pokud to z hlediska site ma mit
> > ruzna
> > >>>>>>>>>>> opravneni.
> > >>>>>>>>>>> Treba cidla ve vodni elektrarne se hlasi ke
> > "koncentratoru"
> > >>>>>>>>>>> a na ten se
> > >>>>>>>>>>> hlasi sef z domu mimo objekt. Pokud jsou to dve ruzne
> > IP na
> > >>>>>>>>>>> koncentratoru na
> > >>>>>>>>>>> dvou ruznych VLAN je to nuda. Kdyz je to na jedne IP a v
> > >>>>>>>>>>> jedne VLAN urcene
> > >>>>>>>>>>> pro "technologii" ale ma to aspon dva ruzne IP porty na
> > >>>>>>>>>>> kterých to
> > >>>>>>>>>>> komunikuje, tak se to da na nejakem blackboxu jeste
> > >>>>>>>>>>> jednoduse omezit co kdo
> > >>>>>>>>>>> a kam smi. A udelat to na jednom portu s ruznymi
> > >>>>>>>>>>> opravnenimi, tak to znamena
> > >>>>>>>>>>> lezt do paketu a filtrovat na vyssich vrstvách a to
> je na
> > >>>>>>>>>>> odstrel toho kdo
> > >>>>>>>>>>> to vymyslel. A navic si nedokazu predstavit
> gramatiku pro
> > >>>>>>>>>>> vyhodnoceni, pokud
> > >>>>>>>>>>> by mely byt pouzity dva na sobe nezavisle protokoly,
> > které
> > >>>>>>>>>>> postupne vyviji
> > >>>>>>>>>>> dve rozdilne party. Takze tudu NEEEEEEEEEEEEEE.
> > >>>>>>>>>>>
> > >>>>>>>>>>> Radek (benedikt2hw.cz)
> > >>>>>>>>>>>
> > >>>>>>>>>>> -----Original Message-----
> > >>>>>>>>>>>
> > >>>>>>>>>>> Nevidim dovod preco by to nemalo byt mozne. Na jednom
> > porte
> > >>>>>>>>>>> mozete otvorit
> > >>>>>>>>>>> tolko spojeni kolko vam len pamat a operacny system
> > dovoli.
> > >>>>>>>>>>> Ostatne je zalezitost komunikacneho protokolu a ten
> > mate pod
> > >>>>>>>>>>> kontrolou.
> > >>>>>>>>>>> Ci je toto vhodne riesenei problemu si ale nedovolim
> > posudit.
> > >>>>>>>>>>>
> > >>>>>>>>>>> _______________________________________________
> > >>>>>>>>>>> HW-list mailing list - sponsored by www.HW.cz
> > >>>>>>>>>>> Hw-list na list.hw.cz
> > >>>>>>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
> > >>>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>> ---
> > >>>>>>>>>> Tato zpráva byla zkontrolována na viry programem Avast
> > >>>>>>>>>> Antivirus.
> > >>>>>>>>>> https://www.avast.com/antivirus
> > >>>>>>>>>>
> > >>>>>>>>>> _______________________________________________
> > >>>>>>>>>> HW-list mailing list - sponsored by www.HW.cz
> > >>>>>>>>>> Hw-list na list.hw.cz
> > >>>>>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> --
> > >>>>>>>>> *Ondřej Janovský
> > >>>>>>>>> Alarex-Group s.r.o.
> > >>>>>>>>> *
> > >>>>>>>>> mobil: +420 723 616 751
> > >>>>>>>>> em na il: ondrej.janovsky na alarex.cz
> > >>>>>>>>>
> > >>>>>>>>> www.m2marchitect.cz <http://www.m2marchitect.cz>
> > >>>>>>>>> www.alarex.cz <http://www.alarex.cz>
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> _______________________________________________
> > >>>>>>>>> HW-list mailing list - sponsored by www.HW.cz
> > >>>>>>>>> Hw-list na list.hw.cz
> > >>>>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>> ---
> > >>>>>>>> Tato zpráva byla zkontrolována na viry programem Avast
> > Antivirus.
> > >>>>>>>> https://www.avast.com/antivirus
> > >>>>>>>>
> > >>>>>>>> _______________________________________________
> > >>>>>>>> HW-list mailing list - sponsored by www.HW.cz
> > >>>>>>>> Hw-list na list.hw.cz
> > >>>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> --
> > >>>>>>> *Ondřej Janovský
> > >>>>>>> Alarex-Group s.r.o.
> > >>>>>>> *
> > >>>>>>> mobil: +420 723 616 751
> > >>>>>>> em na il: ondrej.janovsky na alarex.cz
> > >>>>>>>
> > >>>>>>> www.m2marchitect.cz <http://www.m2marchitect.cz>
> > >>>>>>> www.alarex.cz <http://www.alarex.cz>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> _______________________________________________
> > >>>>>>> HW-list mailing list - sponsored by www.HW.cz
> > >>>>>>> Hw-list na list.hw.cz
> > >>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
> > >>>>>>
> > >>>>>>
> > >>>>>> ---
> > >>>>>> Tato zpráva byla zkontrolována na viry programem Avast
> > Antivirus.
> > >>>>>> https://www.avast.com/antivirus
> > >>>>>>
> > >>>>>> _______________________________________________
> > >>>>>> HW-list mailing list - sponsored by www.HW.cz
> > >>>>>> Hw-list na list.hw.cz
> > >>>>>> http://list.hw.cz/mailman/listinfo/hw-list
> > >>>>>
> > >>>>>
> > >>>>> --
> > >>>>> *Ondřej Janovský
> > >>>>> Alarex-Group s.r.o.
> > >>>>> *
> > >>>>> mobil: +420 723 616 751
> > >>>>> em na il: ondrej.janovsky na alarex.cz
> > >>>>>
> > >>>>> www.m2marchitect.cz <http://www.m2marchitect.cz>
> > >>>>> www.alarex.cz <http://www.alarex.cz>
> > >>>>>
> > >>>>>
> > >>>>> _______________________________________________
> > >>>>> HW-list mailing list - sponsored by www.HW.cz
> > >>>>> Hw-list na list.hw.cz
> > >>>>> http://list.hw.cz/mailman/listinfo/hw-list
> > >>>>
> > >>>>
> > >>>> ---
> > >>>> Tato zpráva byla zkontrolována na viry programem Avast
> Antivirus.
> > >>>> https://www.avast.com/antivirus
> > >>>>
> > >>>> _______________________________________________
> > >>>> HW-list mailing list - sponsored by www.HW.cz
> > >>>> Hw-list na list.hw.cz
> > >>>> http://list.hw.cz/mailman/listinfo/hw-list
> > >>>
> > >>>
> > >>> _______________________________________________
> > >>> HW-list mailing list - sponsored by www.HW.cz
> > >>> Hw-list na list.hw.cz
> > >>> http://list.hw.cz/mailman/listinfo/hw-list
> > >>>
> > >>
> > >>
> > >> ---
> > >> Tato zpráva byla zkontrolována na viry programem Avast Antivirus.
> > >> https://www.avast.com/antivirus
> > >>
> > >> _______________________________________________
> > >> HW-list mailing list - sponsored by www.HW.cz
> > >> Hw-list na list.hw.cz
> > >> http://list.hw.cz/mailman/listinfo/hw-list
> > >
> > >
> > > --
> > > *Ondřej Janovský
> > > Alarex-Group s.r.o.
> > > *
> > > mobil: +420 723 616 751
> > > em na il: ondrej.janovsky na alarex.cz
> > >
> > > www.m2marchitect.cz <http://www.m2marchitect.cz>
> > > www.alarex.cz <http://www.alarex.cz>
> > >
> > >
> > > _______________________________________________
> > > HW-list mailing list - sponsored by www.HW.cz
> > > Hw-list na list.hw.cz
> > > http://list.hw.cz/mailman/listinfo/hw-list
> >
> >
> > ---
> > Tato zpráva byla zkontrolována na viry programem Avast Antivirus.
> > https://www.avast.com/antivirus
> >
> > _______________________________________________
> > HW-list mailing list - sponsored by www.HW.cz
> > Hw-list na list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
> >
> >
> >
> > _______________________________________________
> > HW-list mailing list - sponsored by www.HW.cz
> > Hw-list na list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
>
>
> ---
> Tato zpráva byla zkontrolována na viry programem Avast Antivirus.
> https://www.avast.com/antivirus
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
---
Tato zpráva byla zkontrolována na viry programem Avast Antivirus.
https://www.avast.com/antivirus
Další informace o konferenci Hw-list