Autor Téma: Delphi XE4 - TCP/IP  (Přečteno 632 krát)

Offline sebik

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Delphi XE4 - TCP/IP
« kdy: 17-08-2021, 12:35:04 »
Ahoj,
dostal jsem úkol udělat v DelphiXE4 komunikaci pomocí TCP/IP se serverem, což jsem zatím nikdy neřešil. Na serveru jsou nějaké ASP funkce (předávají se JSON data). Představa je asi takováto:
- start komunikace
- start ASP funkce na serveru (na serveru se spustí Workflow)
  - periodicky se ptát na dílčí výsledky funkce
  - reagovat na ně
  - načíst výsledek
- ukončit ASP funkci a komunikaci

Zatím jsem hledal, zkoušel je toho hodně… např se Synapse (HTTPSend.pas) a s indyproject (TIdTCPClient)...

Můj dotaz: Poradíte někdo jak nejlépe na to? Ať nejdu slepou uličkou :(. Hlavně jak řešit „periodické čekání a komunikaci“.
Vítám podměty, příklady… předem Vám moc děkuji.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 241
  • Karma: 17
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Delphi XE4 - TCP/IP
« Odpověď #1 kdy: 17-08-2021, 13:31:55 »
Excellent
Rated 1 time
ASP funkce obvykle běží na HTTP serveru, ne? Ten funguje na principu dotaz-odpověď, tedy jinak než si představuješ.

Odpověď může chvíli trvat, jde jen o správné nastavení timeoutu, aby byl delší než nejdelší předpokládaná operace. Pokud je to opravdu http či https, pak sestavila dotaz, počkáš na odpověď, a tu si pak přečteš. Věci jako sestavování spojení se dějí kdesi v hloubi těch knihoven a nemusíš se o to starat. (Alespoň v Synapsi to tak je.)

Offline sebik

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Re:Delphi XE4 - TCP/IP
« Odpověď #2 kdy: 17-08-2021, 14:20:43 »
Ano, běží to na http a je to přístupné i přes web odkazem http://server:port/Funkce/parametr1/parametr2

Mezitím jsem si to ujasnil s tvůrcem ASP funkcí, a je to opravdu tak, že klient pošle něco na server a počká na odpověď, zpracuje a případně zase něco pošle atd..

Takže pro toto řešení by měl stačit Synapse (HTTPSend.pas)? Testoval jsem HTTP.HTTPMethod('GET', něco), odpověd čtu z HTTP.Document

Šlo by to např. i přes TIdTCPClienta co je v DELPHI? Jak poslat tam něco jako 'GET'?

Offline KarelHorky

  • Plnoletý
  • ***
  • Příspěvků: 233
  • Karma: 9
    • Verze Delphi: XE6, Delphi 10.2 Tokyo
Re:Delphi XE4 - TCP/IP
« Odpověď #3 kdy: 17-08-2021, 15:09:38 »
Zkus do Google zadat:
delphi indy http get
Určitě najdeš odpověď.
K.
Win10 Prof 64b, Firebird 2.5

Offline sebik

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Re:Delphi XE4 - TCP/IP
« Odpověď #4 kdy: 18-08-2021, 07:45:03 »
hledat umím... dík, ale cest je několik. Spíš mi jde o praktické věci, co použít, na co si dát pozor.

Např. Indy - lze použít TIdHTTP, ale jde o synchronní přenos - při spuštění "práce" formulář zamrzne - nejlepší řešení vytvořit vlákno nebo použít IdAntiFreeze

Prostě spíš "postrčit" nějakým směrem  ;D...

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1171
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Delphi XE4 - TCP/IP
« Odpověď #5 kdy: 18-08-2021, 22:43:00 »
V druhém vlákně máš odpověď. Na IdAntiFreeze být tebou zapomenu.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3292
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Delphi XE4 - TCP/IP
« Odpověď #6 kdy: 19-08-2021, 09:49:21 »
ale cest je několik. Spíš mi jde o praktické věci, co použít, na co si dát pozor.
No, predne to bude chtit dostudovat HTTP protokol a protoze podle tveho popisu je to banalni uloha, tak si tech cest vyzkouset nekolik, abys ziskal zkusenosti, jak se s cim pracuje - obecne se rika, ze zkusenost je neprenositelna  ;)

Ve spravne navrzene aplikaci by komunikace mela byt oddelena od vizualizace, tak by to nemelo byt o moc pracnejsi. S tim oddelenim komunikace od ksichtu souvisi i dalsi problem: v hlavnim threadu se nic deletrvajiciho neprovadi - to vsechno patri do podruznych threadu a synchronizuje se s hlavnim threadem -> neni zadny problem pouzit blokujici komunikaci - jednoduseji se to pise, cte a udrzuje, nez nejaka logika rozm*dana do obsluhy buhvi kolika events.

Nevim, o jakou aplikaci se jedna, ale obecne se stupnuji pozadavky na bezpecnost, tj. kdo tu HTTP request muze udelat, aby s tim neoperoval nikdo neopravneny tj. autentikace a autorizace. A tady je odveka slabost platformy Delphi, ktera nestiha v knihovnach zapracovavat vyvoj v dane oblasti. Cilli pokud se to nejak tyka korporatu, tak bych si daval pozor, co s resenim udelam, az si nekdo usmysli, ze zavede certifikaty a pozdeji treba bankovni identitu -> nekdy nezbyva, nez Delphi uplne zahodit a napsat to znovu v necem jinem, kde potrebne knihovny existuji.