1

Téma: [vyřešeno] dlouhá odezva http_get s odpovědí

dobrý den ,
mám problém s rychlostí getování na web

když to tam pošlu bez požadavku na odpověď trvá to cca 0.5s
VIZ:
htttp_get(192,168,1,2, 80, "192.168.1.2", htttppozadavek, (void *)0, 0);
ECHO:
START
calling http_get...
DONE OK. HTTP RESPSTAT = 200 receivedDataSize = 0
03.12.18 12:24:41 po 570ms

pokud to tam pošlu s požadavkem na odpověď je doba zpracování o 5 sekund delší
VIZ:
htttp_get(192,168,1,2, 80, "192.168.1.2", htttppozadavek, (void *)ReceiveDataBuffer, 16);
ECHO:
calling http_get..
DONE OK. HTTP RESPSTAT = 200 receivedDataSize = 3
data - "N"03.12.18 12:11:58 po 5390ms

a to v kódu pouze vyměním nuly za pointer na buffer a velikost

je problém u mně nebo ve firmware?

2

Re: [vyřešeno] dlouhá odezva http_get s odpovědí

Zajímavé.

Zkuste ten samý test z počítače, např. přes F12 ve Firefoxu - ukáže vám to přesné časování kde co a jak dlouho trvá. Ideálně udělejte screenshot - v prohlížeči Firefox zmáčkněte F12, pak zadejte URL 192.168.1.2/httppozadavek a v záložce "Síť" uvidíte ve sloupci "časová osa" přesně všechny jednotlivé kroky, které se staly při komunikaci se serverem, a hlavně také jak dlouho to trvalo.

Pokud se tam ukáže že to trvá také přes 5 sekund, tak to nepůjde v SDS řešit, protože SDS zkrátka jenom čeká na server.
Pokud to ale půjde ve Firefoxu mnohem rychleji, pak je to otázka co že se v tomto případě v SDS děje. Bude pak vhodné zkontrolovat pakety přes Wireshark, jestli se ten server nechová "nestandardně", např. neposílá odpověd ve zbytečně velkém množství paketů a podobné věci.

Až tedy budou tyto data k dispozici, můžeme pokračovat.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

3

Re: [vyřešeno] dlouhá odezva http_get s odpovědí

OMLOUVAM SE ,
ale byl jsem zaneprazdnen aby jsme se vratili k nasemu problemu odezva webu je standardni par ms
tak jsem pripravil kod a web server aby jste si to vyzkouseli

kod je na adrese: sds.twf.cz/debug_http_get_fill.c

http dotaz  je:      a.b.c.d/homepage/?do=getrfid&id=123456&op=r

zkousel jsem to i ted s novym FW  z unora 2019 a je to stejne

4

Re: [vyřešeno] dlouhá odezva http_get s odpovědí

Prosím o lepší vysvětlení toho co je nachystáno.

Jak si to mohu vyzkoušet ? Mám tomu textu rozumět tak, že je někde u vás nachystán webový server, na který mohu ze SDS poslat dotaz ?
To by bylo výborné, šlo by zjistit kde se to zpomaluje.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

5

Re: [vyřešeno] dlouhá odezva http_get s odpovědí

ok
takze  ukazkovy c program pro sds big nebo small je ulozen na teto adrese

sds.twf.cz/debug_http_get_fill.c

a na Verejne IP adrese a.b.c.d
je pripraven web server , ktery reaguje na nasledujici http pozadavek

  a.b.c.d/homepage/?do=getrfid&id=123456&op=r

totez provadi i c program nahrany do SDS
staci to takhle?

6

Re: [vyřešeno] dlouhá odezva http_get s odpovědí

ano, už tomu rozumím

6.3.2019 podvečer - zmíněný webový server nereaguje (a je jedno jaké URI tam dám), a vždy dostávám na TCP okamžitou odpověď RST, tzn. nelze se připojit.

zkusím to zítra podvečer, snad už to bude provozní

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

7

Re: [vyřešeno] dlouhá odezva http_get s odpovědí

muj mistake bylo to omezene na ip jiz je to otevreno
tak ted uz by to melo fungovat

8

Re: [vyřešeno] dlouhá odezva http_get s odpovědí

Takže jsem to vyzkoušel. Stačil k tomu prakticky jenom Wireshark.

Jak pro SDS, tak pro PC (Firefox) se to celé chová časově úplně stejně.
Tzn. je tam to zpoždění tak jak se vám nelíbí, bez ohledu na zařízení (PC, SDS, atd).
SDS se chová správně a chyba v něm není.

Je tam "zpoždění" na straně serveru:
poté co server vyšle paket s "HTTP 200 OK", a přijemce tento paket ihned potvrdí (TCP ACK),
trvá serveru dalších 5 sekund (!) než udělá něco dalšího (např. zavře TCP spojení).
"Na vině" bude nejspíše nastavení serveru v oblasti Connection:Keep-Alive.
Samozřejmě že dokud TCP spojení není uzavřeno, tak SDS čeká na příjem dat (do počtu, který jste ve svém programu nastavil), nebo čeká na uzavření spojení (timeout na straně SDS což je 45sec, nebo uzavření ze strany serveru, což je v tomto případě změřených 5sec).

Pozor ale, je to vlastnost respektive nastavení serveru, není to chyba.


Poznámka:
SDS je naopak v jedné záležitosti rychlejší (tj. umí něco, co např. na PC ani nejde):
a to když se mu dá příkaz nečekat na http data.
V takovém případě SDS slušně a správně uzavře spojení samo hned po HTTP200OK/ACK a pak si pokračuje ve své činnosti,
takže se pak zdá že je celá věc mnohem rychlejší.

Bližší popis toho co se děje:
Podle zdrojového FC kódu vašeho testovacího programu, říkáte SDS ať čeká na 5 datových bajtů ze serveru.
Podle zachycené odpovědi posílá váš server jen 3 bajty (tyto tři znaky: "N"), takže SDS správně čeká na zbylé dva (které ale nepřijdou; a server po pěti vteřinách sám ukončí spojení a tím také odblokuje SDS, které pak správně hlásí že přijalo 3 znaky).
Samozřejmě nastavení 5 nebo více znaků je v pořádku, pokud ze serveru přijde méně tak je to také platná odpověď a SDS to zpracuje a předá správně.
Jen je potřeba si uvědomit, že takto nastavený server způsobí čekání na straně SDS, což je vše přesně podle specifikace.


Pro zajímavost, udělejte si vlastní záchyt pomocí wiresharku u sebe doma.
A nepotřebujete k tomu ani SDS, jde to jasně vidět i když na server půjdete z prohlížeče.
Zde je příklad:

No.  Time              Source     Destination   Protocol Length Info
01   4.619124       SDS         SERVER          TCP      58     61050 → http(80) [SYN] Seq=0 Win=1446 Len=0 MSS=1260
02   4.652073       SERVER          SDS         TCP      60     http(80) → 61050 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1440
03   4.654216       SDS         SERVER          HTTP     150    GET /homepage/?do=getrfid&id=0AF45B12&op=r HTTP/1.1 
04   4.657070       SDS         SERVER          TCP      54     61050 → http(80) [ACK] Seq=1 Ack=1 Win=1446 Len=0
05   4.686264       SERVER          SDS         TCP      60     http(80) → 61050 [ACK] Seq=1 Ack=97 Win=29200 Len=0
06   4.686333       SERVER          SDS         TCP      60     [TCP Dup ACK 12#1] http(80) → 61050 [ACK] Seq=1 Ack=97 Win=29200 Len=0
07   4.789677       SERVER          SDS         HTTP     777    HTTP/1.1 200 OK  (application/json)
08   4.792441       SDS         SERVER          TCP      54     61050 → http(80) [ACK] Seq=97 Ack=724 Win=1446 Len=0
09   9.800635       SERVER          SDS         TCP      60     http(80) → 61050 [FIN, ACK] Seq=724 Ack=97 Win=29200 Len=0
10   9.802843       SDS         SERVER          TCP      54     61050 → http(80) [FIN, ACK] Seq=97 Ack=725 Win=1446 Len=0
11   9.837583       SERVER          SDS         TCP      60     http(80) → 61050 [ACK] Seq=725 Ack=98 Win=29200 Len=0

Právě mezi paketem No. 08 (to je ACK od SDS) a paketem No. 09(to je uzavření spojení od serveru) je těch 9.80 minus 4.79 sekund, tj. 5 sekund čekání (což je nastaveno ve vašem serveru).

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

9

Re: [vyřešeno] dlouhá odezva http_get s odpovědí

opravdu je to tak
nebylo mi to jasne protoze Firefox mi na nic necekal a v sitove http komunikaci  to tim  "HTTP 200 OK" konci.
Ale ve wiresharku je videt jeste nejaka odezva v TCP po tech peti sekundach .Nicmene je to opravdu proto,
ze SDS ceka jeste nejaka dalsi data .Problem je proto resitelny tim ze dam pro komunikaci s http serverem
jednotnou delku retezce jak pro SDS tak pro http server  napr  receivedDataSize=3   pro "N"
moc dekuji