Elektroda.pl
Elektroda.pl
X
Servizza
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Delphi - Jak wykorzystać program Delphi jako "bibliotekę" w Web-Aplika

leburaque 18 Lis 2016 10:55 882 13
  • #1 18 Lis 2016 10:55
    leburaque
    Poziom 17  

    Przepraszam jeśli pytanie nie jest zbyt mądre, albo nie do końca jest zrozumiała jego treść, ale oto problem:

    Napisałem w Delphi program którego celem jest przekształcanie plików tekstowych z formatu A do B i to główny jego cel. Chciałbym żeby takie samo działanie następowało po wczytaniu pliku w aplikacji webowej (ja to rozumiem jako - dowolnej stronie WWW dostępnej dla dowolnego użytkownika). Ponieważ program zawiera wiele reguł pisanie go od nowa w innym języku zajmie mi bardzo dużo czasu. Wolałbym tego uniknąć - stąd pytanie:

    Czy mogę w jakiś sposób utworzyć w Delphi jakiś rodzaj biblioteki wykorzystywanej przez stronę? Mam na myśli działanie bardzo podobne do desktopowej aplikacji którą na pisałem - na stronie WWW wczytuję plik tekstowy, "biblioteka" w Delphi obrabia to po stronie serwera, a następnie na stronie wywalany jest wynik w postaci obrobionego pliku txt.

    Nie pytam póki co o szczegóły - interesuje mnie, czy to w ogóle jest możliwe... oraz jak.

    Dziękuję z góry za każdą podpowiedź.

    0 13
  • Servizza
  • Pomocny post
    #2 18 Lis 2016 11:52
    rb401
    Poziom 33  

    leburaque napisał:
    interesuje mnie, czy to w ogóle jest możliwe... oraz jak.


    Jest możliwe jak najbardziej. Nie mam tu akurat Delphi pod ręką ale pamiętam że już w dawnych wersjach było coś takiego jak chyba CGI application właśnie pod współprace z serwerem http by wytwarzać dynamiczne strony. I jakieś komponenty do tego i przykłady.

    0
  • #3 18 Lis 2016 17:13
    leburaque
    Poziom 17  

    Dziękuję za informację - rozumiem, że
    https://pl.wikipedia.org/wiki/Common_Gateway_Interface
    można traktować jako "programy" położone na serwerze do których strona WWW ma dostęp?

    Tutaj piszą, że jest to przestarzałe narzędzie i proponują ISAPI:
    http://stackoverflow.com/questions/1172190/web-application-in-delphi

    Chodzi o wysłanie informacji tekstowej do programu, przetworzenie jej i wysypanie nawet na ekran.

    Znalazłem tu coś o następującej treści:

    http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_18

    na przykład

    TWebModule

    Ale jest to artykuł z 2006, czyli ma już swoje lata... Czy napisany w ten sposób program będzie miał sens we współczesnym środowisku np. PHP?

    EDIT: znalazłem coś z 2009: http://haker.com.pl/threads/17004-Delphi-i-CGI-cz-1

    Podejrzewam, że zasada działania jest podobna. Ale jeśli jest coś nowszego, to proszę o informacje.

    0
  • Pomocny post
    #4 19 Lis 2016 04:17
    rb401
    Poziom 33  

    leburaque napisał:
    można traktować jako "programy" położone na serwerze do których strona WWW ma dostęp?


    To jest prawie tak samo jak np. skrypty PHP (z tą różnicą że aplikacje CGI znajdują się w wyróżnionym folderze np. cgi-bin i serwer ma ustawiony ten folder jako script path a php może być "wszędzie" ).
    CGI/ISAPI ma zaletę że jest wykonywane dużo szybciej niż interpretacja skryptów, zapewnia wygodę dostępu do systemu, sprzętu, aplikacji nie dostępnych z PHP itp. tak samo jak dla innych zwykłych aplikacji.
    Za to wadą jest to że muszą być plikami odpowiednimi dla systemu operacyjnego, na którym pracuje serwer http.
    Czyli mając program pod Delphi, praktycznie możesz użyć tylko kiedy serwer pracuje na Windows.

    Tak że cała kwestia użycia aplikacji CGI/ISAPI, zależy generalnie od uwarunkowań, gdzie i na jakie potrzeby będą użyte.
    Jeśli na przykład ma być to strona używana na sieci lokalnej czy wręcz na komputerze z jakimś serwerkiem pracującym w tle (istnieją minimalistyczne serwery http z obsługą CGI) , to akurat CGI/ISAPI jest w sam raz.
    Może nawet CGI ("przestarzałość" będzie nieistotna) może być wygodniejsze, bo jest prostsze w realizacji, jako że aplikacja CGI może być w zasadzie prostą aplikacją konsolową.
    Dla ilustracji, przykład (akurat pod Lazarusa ale pewnie w Delphi będzie tak samo), który pokazuje jak bez komponentów itp. zrobić aplikację CGI:
    http://wiki.lazarus.freepascal.org/CGI_Web_Programming

    leburaque napisał:
    Czy napisany w ten sposób program będzie miał sens we współczesnym środowisku np. PHP?


    Z PHP to nie ma nic wspólnego. Uruchamianie aplikacji CGI/ISAPI to wyłącznie funkcjonalność serwera http i może się "splatać" z innymi technologiami jakie by nie były, praktycznie bez przeszkód. A sens zależy tylko od uwarunkowań i potrzeb. Jeśli jak piszesz masz algorytm w Delphi to raczej jedyna droga na dziś aby go wpiąć bez przepisywania na inny język w stronki.

    0
  • Servizza
  • Pomocny post
    #5 19 Lis 2016 23:08
    arnoldziq
    Moderator Programowanie

    Można zastosować kilka różnych rodzajów aplikacji, które można stworzyć w Delphi.
    Wybór konkretnego rozwiązania, zależy od tego, czy kolega autor chce, zastosować aplikację jako serwer HTML, czy tylko uzyskać od aplikacji jakieś dane a wyświetlanie wyniku będzie realizowane poprzez stronę napisaną np. w PHP albo czymś podobnym.

    W pierwszym przypadku, sugeruję użyć bibliotek IntraWeb - szybko, kod serwera jest generowany praktycznie automatycznie, łatwo zrobić swoją grafikę, formy itd.
    Przykładowy filmik :

    Link


    Może się kolega autor także pokusić o oprogramowanie własnego serwera WWW. Także w miarę proste, gotowe kody dostępne chociażby tutaj : [DELPHI] HTTPServer wysyłanie obrazka przez HTTP.

    Co do drugiej formy dostępu, czyli użycia programu w Delphi tylko do obsługi danych a wyświetlania np. w PHP, to opcji jest dosłownie setki.
    Począwszy od WebBrocker-a (WSDL/SOAP) a skończywszy na prostym socket server-ze TCP.

    Wszystko zależy od tego co autor tematu chce uzyskać, i w jaki sposób.

    Co do przepisywania, czasami dość skomplikowanych kodów, na inne języki tylko po to, żeby coś pokazać na stronie WWW,, to uważam, że to bez sensu. Łatwiej i szybciej będzie wygenerować interface WSDL, który opracuje dane w Delphi i wyśle na stronę gotowe wyniki.

    0
  • #6 20 Lis 2016 00:36
    leburaque
    Poziom 17  

    Bardzo dziękuję Panowie. Postaram się w takim razie opisać parę szczegółów.

    1) Dlaczego chcę to tak zrobić?
    Dotychczas wśród grupy współpracowników moim zadaniem było "przekształcanie" danych tekstowych na inne dane tekstowe. Do obróbki pisałem sobie w Delphi program który po ponad roku rozbudował się o bardzo wiele reguł - dlatego za stratę czasu uważam jego przepisywanie (+ działa i jest zdebugowany). Okazało się, że mój algorytm może być przydatny osobom z innych działów w różnych miastach stąd pomysł, aby przez stronę WWW dowolny user miał możliwość tego samego. Odpadła by także kwestia sprawdzania aktualnej wersji mojego programu, czy tego jaki system operacyjny z jakimi dodatkami obecnie ma współpracownik.

    2) Jak konkretnie ma to działać?
    User/współpracownik poprzez stronę wczytuje plik tekstowy. Plik jest przekazywany do mojej "biblioteki" wraz z ustalonymi kilkoma kontrolkami (parę checkboxów które user zaznacza). "Biblioteka" zgodnie z kontrolkami przetwarza plik tekstowy i wysypuje na ekran przetworzoną treść do skopiowania, albo w ogóle wywala plik tekstowy do pobrania.

    3) Jak rozumiem obecnie działanie tego o czym mówimy?
    Po raz kolejny przeproszę za upraszczanie bądź niezrozumienie jakichś kwestii technicznych. Zakładam, na serwer firmy (obsługuje PHP 4/5.2/5.3/5.4/5.5/5.6/7.0, CGI, Python, Ruby, https://linuxpl.com/Konto-W1GB_f_2_pakiet_19) "wgrywam" utworzoną "bibliotekę" do której odwołuje się kod PHP na stronie. To co będzie na niej wizualnie jest dla mnie drugorzędne, ważne żeby wczytała plik tekstowy i przekazała go z kontrolkami do biblioteki, a ta "odda" wynik na ekran. Mogę to potem w przyszłości wraz ze wzrostem umiejętności rozbudować o walidację czy estetykę i tym podobne, ale na początek chyba wystarczy.

    4) Dlaczego chcę stworzyć bibliotekę?
    Wyprowadzając Unit Delphi z kodu mogę jednocześnie na bieżąco pisać sobie apkę desktopowo i na bieżąco ją debugować, a z każdym następnym uzyskaniem stable wersji wystarczy że unit wgram na serwer i każdy z userów/współpracowników może z niego korzystać.


    I teraz - rozumiem, że CGI mimo pewnej "przestarzałości" wykona to czego potrzebuję? Czy lepiej się dokształcić i pójść w jakąś bardziej "nowoczesną" technologię zakładając rozwój projektu?

    0
  • #7 20 Lis 2016 01:36
    rb401
    Poziom 33  

    leburaque napisał:
    Zakładam, na serwer firmy (obsługuje PHP 4/5.2/5.3/5.4/5.5/5.6/7.0, CGI, Python, Ruby, https://linuxpl.com/Konto-W1GB f 2 pakiet 19) "wgrywam" utworzoną "bibliotekę" do której odwołuje się kod PHP na stronie.


    Ale tu jest podstawowa przeszkoda. Serwer jest linuksowy i CGI pisane pod windowsowym Delphi nie zadziała pod linuksem niezależnie czy to będzie exe czy dll.

    Czyli albo na Twoim komputerze jakaś usługa, serwerek dostępny z tego głównego serwera i w czasie gdy ktoś używa stronki konwersji, wysyła do Twojego komputera "odpytanie" o treść, kompletując później stronę www z odpowiedzią. Tu są pewnie różne możliwości, ale zdaje mi się że kolega arnoldziq jest bardziej biegły w tych sprawach.
    Albo stawiasz lokalny serwerek http u siebie, właściwie tylko ze stronką tej konwersji (ruch nieduży to i serwer może być prosty). A na serwerze firmowym ewentualnie zrobione tylko przekierowanie dla wygody.

    Ale podstawową wadą tych dwóch metod jest konieczność stałego włączenia Twojego komputera, co najmniej w czasie kiedy potencjalnie będzie zapotrzebowanie i konieczność ustawienia sieci lokalnej do której jesteś podczepiony, tak by Twój serwerek był widoczny z zewnątrz.

    Albo, co wydaje mi się teoretycznie wykonalne ale nie jestem biegły w tych obszarach, przeniesienie istotnego kodu z Delphi na Lazarusa i napisanie np. aplikacji CGI z Twoim algorytmem, tak by skompilowany pod linuksową wersją Lazarusa nadawał się do wgrania na firmowe konto na serwerze linuksowym jako plik CGI.

    0
  • #8 20 Lis 2016 08:42
    leburaque
    Poziom 17  

    Czyli - jeśli dobrze rozumiem mam dwie drogi:

    A) To co zostało skompilowane w Delphi for Windows nie będzie działać na serwerze Windowsowym, nawet jako biblioteka czy cokolwiek innego; po prostu muszę to skompilować pod Lazarusem (słuchając w tle Bowie'go:) i wówczas mogę dopiero myśleć o korzystaniu z tego na swoim serwerze.

    http://portal.suse.pl/wiki/index.php/Lazarus,_czyli_Delphi_w_Linuksie

    B) Samodzielnie postawić prosty serwer oparty o architekturę Windows który będzie po prostu odpytywany a serwer firmy będzie tylko przekierowywał. Nie wiem czy nie mnożę w ten sposób bytów, chciałem to nieco zautomatyzować, a tu obawiam się, że efekt będzie ten sam co przesyłanie maili. :)

    Czy nie ma zatem jakiegoś bardziej uniwersalnego sposobu? Wyprowadzenia jakichś pół-bibliotek czy czegoś co będzie działało i tu i tu? Albo wdrożenia na serwerze czegoś co będzie po jego stronie "emulować"/"kompilować"?

    W ogóle to bardzo dziękuję za wszelkie informacje. Dużo dzięki temu wszystkiemu się uczę.

    0
  • Pomocny post
    #9 20 Lis 2016 18:26
    arnoldziq
    Moderator Programowanie

    leburaque napisał:
    To co zostało skompilowane w Delphi for Windows nie będzie działać na serwerze Windowsowym
    Wręcz odwrotnie. To co zostało skompilowane do pliku EXE lub DLL, będzie działać tylko w środowisku Windows.
    leburaque napisał:
    B) Samodzielnie postawić prosty serwer oparty o architekturę Windows który będzie po prostu odpytywany a serwer firmy będzie tylko przekierowywał. Nie wiem czy nie mnożę w ten sposób bytów, chciałem to nieco zautomatyzować, a tu obawiam się, że efekt będzie ten sam co przesyłanie maili. :)
    Jeżeli serwer firmowy jest oparty o Linux-a, to jest to najrozsądniejsze wyjście.

    Jak dla mnie, to najszybszym i najprostszym rozwiązaniem jest postawienie samodzielnego pliku EXE jako serwera jednej czy dwóch metod WSDL-a i łączenie się do tego pliku poprzez sieć lokalną z serwera firmowego.
    Jak stworzyć taki serwis w Delphi: http://chapmanworld.com/2015/03/30/creating-and-consuming-soap-services-in-delphi/ . Krok po kroku, nawet nie trzeba znać angielskiego specjalnie.

    Natomiast co do samych procedur operujących na tych podawanych danych, to użycie DLL-a zawierającego najnowsze, najstabilniejsze procedury, jest jak najbardziej na miejscu.

    0
  • Pomocny post
    #10 20 Lis 2016 23:26
    rb401
    Poziom 33  

    leburaque napisał:
    chciałem to nieco zautomatyzować, a tu obawiam się, że efekt będzie ten sam co przesyłanie maili.


    A gdyby to wysyłanie maili zautomatyzować? Wręcz uczynić z nich istotę rozwiązania.

    Nasunął mi się taki pomysł, może prymitywny ale za to relatywnie łatwy do zrobienia.

    Załóżmy że jest założone pewne osobne konto na serwerze pocztowym firmy, wyłącznie do celów konwersji (lub od biedy na Twoim firmowym koncie, ale musi być jakaś filtracja zrobiona).
    A tekst do konwersji trafia jako mail na tą skrzynkę w jakimś uzgodnionym formacie (głównie chodzi o przekazanie opcji np. w temacie).
    Maile wysyłane mogą być bezpośrednio przez zainteresowanych z ich programów pocztowych, lub prostą aplikacją z formularzem na stronie firmowej, gdzie chętni umieszczają dane, opcje i adres zwrotny i naciskają guzik, a skrypt wysyła maila.

    A Ty dopisujesz do Twojego programu w Delphi obsługę POP3 i SMTP (standardowo są do tego komponenty wraz z opisami działania i przykładami) tak by Twój program sprawdzał np. co minutę ta jedną skrzynkę i w momencie kiedy byłby tam jakiś mail, sprawdził jego poprawność i kompletność względem uzgodnionego schematu, przetworzył a rezultat odesłał jako mail pod adres zwrotny.

    Zaletą tego rozwiązania była by łatwość tworzenia i testowania takiej aplikacji (bo wszystko co potrzeba jest już w Delphi), brak potrzeby jakichkolwiek modyfikacji sieci lokalnej (przekierowania portów itd.), stawiania serwerów itp. . No i nie musisz wchodzić w jakieś obszary technologii, których na chwilę obecną nie znasz.
    Po prostu interpretujesz maila i składasz drugiego jako odpowiedź. Resztę spraw załatwią komponenty.
    Po za tym łatwo zastosować kontrolę dostępu bo można reagować tylko ma maile z adresem zwrotnym należącym do firmy.
    Z zalet jeszcze fakt, że ta aplikacja może działać wszędzie, nie tylko w firmowej sieci lokalnej. Tak że łatwo jest w razie problemów z konkretnym komputerem czy siecią lokalną, uruchomić tą usługę gdziekolwiek, gdzie jest dostęp do internetu.

    Wadą będzie konieczność włączenia Twojego komputera (lub innego wyznaczonego do tego celu) z Windows na czas potencjalnego popytu na usługę, no i oczywiście pewien czas, który musi odczekać użytkownik tej usługi. Nie znam specyfiki problemu, to nie wiem czy odczekanie np. minuty na przyjście rezultatu będzie akceptowalne.

    Osobiście, wydaje mi się, że dojście do jakieś poprawnie działającej funkcjonalności tą akurat drogą, może być praktycznie osiągalne i bezpieczne, w sensie znikomej szansy utkwienia w jakimś bagnistym terenie.
    Oczywiście to wszystko pod warunkiem że ta metoda w ogóle była by do przyjęcia w Twoich uwarunkowaniach i wymaganiach.

    0
  • #11 20 Lis 2016 23:40
    leburaque
    Poziom 17  

    Panowie, czytając dzisiaj o różnych rozwiązaniach trafiłem na

    https://pl.wikipedia.org/wiki/Wine

    i może zacznę od takiego rozwiązania? Skoro serwer pracuje na Linuxie, to może wywołanie po prostu "interpretera" załatwiłoby sprawę? Reszta jest chyba prosta, skoro program ma pobrać dane w tekście i wyrzucić z powrotem plik tekstowy...

    Skompilowany plik EXE który w zasadzie mógłby zostać wykonany w środowisku serwera były odpowiedzią na większość problemów które mam. Zwłaszcza, że na forach piszą o tym, że to najprawdopodobniej działa bezproblemowo:

    https://appdb.winehq.org/objectManager.php?sClass=application&iId=42

    Bo mimo mojego zamiłowania do nauki obawiam się że jeśli zagłębię się w jakąś złożoną technologię której nie było mi dane poznać, to może łatwiej będzie skorzystać z czegoś takiego? Co o tym sądzicie?

    0
  • #12 21 Lis 2016 00:14
    rb401
    Poziom 33  

    leburaque napisał:
    Skoro serwer pracuje na Linuxie, to może wywołanie po prostu "interpretera" załatwiłoby sprawę?


    Bardzo atrakcyjne rozwiązanie, tym bardziej że aplikację CGI można by pisać i testować pod Windows (stawiając u siebie jakiś prosty serwerek http np. Abyss Web Server).
    A później, razem z Wine próbować zainstalować na docelowym serwerze. Ale czy to się uda, osobiście nie mam pojęcia. Mogę tylko pokładać pewne nadzieję w tym zdaniu z Wiki:

    "Przy pomocy bibliotek Wine można również przenosić niektóre aplikacje systemu Windows do natywnych plików binarnych systemu Unix.".

    Pytaniem jest czy słówko "niektóre" dotyczy akurat przypadku CGI.
    A to że Delphi rozumiane jako środowisko chodzi pod Wine, to jest chyba trochę inna sprawa bo Wine jest raczej zorientowane bardziej w kierunku aplikacji z GUI.

    Skoro jako firma płacicie za serwer, to może rozjaśniło by sprawę konkretne zapytanie adminów z tej firmy od serwera, czy takie sztuki jak windowsowe CGI przez Wine, są w ogóle wykonalne na ich serwerze.

    0
  • #13 22 Lis 2016 20:02
    leburaque
    Poziom 17  

    Sprawa się skomplikowała:

    rb401 napisał:
    Skoro jako firma płacicie za serwer, to może rozjaśniło by sprawę konkretne zapytanie adminów z tej firmy od serwera, czy takie sztuki jak windowsowe CGI przez Wine, są w ogóle wykonalne na ich serwerze.


    Nasz dostawca usług sieciowych wyjaśnił nam, że mamy hosting współdzielony i nie ma opcji (regulaminowo) nawet na zainstalowanie Wine czy w ogóle postawienia tam mojego programu. Okazało się, że najtańsze hostingi z rootem są kilkakrotnie droższe od tego co mamy teraz (mamy naprawdę małą działalność i nie ma u nas IT jako takiego).

    Poszedłem więc po rozum do głowy i pomyślałem, że przecież możemy w firmie po prostu wstawić za 200 zł kompa z prostym serwerem Windows, który będzie obsługiwał program bez problemu. Serwer będzie po prostu odpytywany po przekierowaniu i to wszystko czego będzie potrzeba. Chciałem się nieco dokształcić i pójść w "lepsze rozwiązania", ale może to wystarczy, żeby po prostu wygrzebać jakiegoś kompa z szafy i go ogarnąć. Nie potrzeba nam żadnej dużej mocy obliczeniowej (sam program ma 0,5 mb). Co sądzisz o takim rozwiązaniu?

    0
  • #14 22 Lis 2016 20:47
    rb401
    Poziom 33  

    leburaque napisał:
    Co sądzisz o takim rozwiązaniu?


    W zasadzie to rozwiązanie jest ok (jeśli postanowiłeś akceptować ten dodatkowy komputer), pomijając dość niską niezawodność Windows używanych non-stop bez nadzoru.

    Sporym plusem rozwiązania jest to, że do uzyskania pełnej funkcjonalności, możesz sobie to robić i łatwo przetestować na sieci lokalnej.


    Jedyne niewiadome a istotne czynniki dla tej koncepcji, to kwestia czy Twoja firma (tam gdzie siedzisz) posiada stały (pożądany ale niekonieczny) i publiczny (konieczny) IP, oraz to czy miałbyś możliwości osobistego pogrzebania (np. w routerze), albo przez inną osoba i wystawienia portu np. 80 z tego "serwerka" na ten publiczny IP. To warto by było sprawdzić i je znać, przed podjęciem innych działań według tej koncepcji.
    Jeśli coś okazało by się nie do przejścia to i tak godząc się na osoby komputer masz jeszcze jakieś możliwości ruchu, np. poprzez koncepcję powiedzmy "autorespondera" z użyciem komponentów Delphi od emaili.


    Przekierowanie ze strony firmy może nawet nie jest tak istotne, bo skoro jest to ograniczone i znane Ci grono użytkowników, to mogą równie dobrze używać adresu www Twojego oddziału.

    0