Thin client - tworzenie na podstawie wersji desktopowej

0

Mam gotową aplikację desktopową ale muszę przerobić to teraz na wersję klient-serwer z tzw. "cienkim klientem" (thin-client). Chciałbym się poradzić jak najlepiej się do tego zabrać i w jakiej technologii. Pracuję na Delphi 10.2 + Firedac. Znalazłem w internecie taki zestaw komponentów dla klient-server realthinclient.
Czy ktoś zajmował się tego typu aplikacjami? Mam kilka pytań odnośnie samej idei.
Interfejs cienkiego klienta jest podobno bardzo uproszczony. Czy wynika to z jakiś założeń czy ograniczeń? Obecnie w aplikacji mam ribbon menu i nie chciałbym się uwsteczniać jeśli chodzi o funkcjonalność menu (duże zrozumiałe ikony, hinty z obrazkami, grupowanie i ukrywanie zakładek z zależności od potrzeb).
Poprawcie mnie bo pewnie źle to rozumiem ale cienkiego klienta widzę albo jako przeglądarkę internetową gdzie po zalogowaniu mam dostęp do aplikacji webowej (czyli większość ciekawych komponentów mi odpada) albo jakaś formatka która przy podłączeniu do serwera pobiera[?] interfejs, w którym wszystkie polecenia wykonywane są zdalnie na serwerze. Czy cienki klient może mieć swój interfejs? Jeśli tak to jak wygląda aktualizacja? Rozumiem, że cienkiego klienta nie powinno się aktualizować tylko robić update aplikacji serwerowej która załatwi resztę zmian u klientów. Jeśli tak to nie powinien on mieć interfejsu bo jak go później rozbudowywać przy aktualizacji na serwerze? Pytania pewnie są banalne dla kogoś kto w tym siedzi ale ja nie mam doświadczenia w tego typu aplikacjach. Może ktoś zna aplikacje które mają opcję dystrybucji z thin-client żeby można było podpatrzyć jak to ma wyglądać i działać. Byłbym wdzięczny za wszelkie informacje jak to ugryźć. Zestaw komponentów który podałem to niezły kombajn i ma sporo przykładów więc na pewno sporo mi pomoże ale chciałem dowiedzieć się jak to wygląda od strony programowania. Czy i w jakim stopniu będę mógł wykorzystać swoją obecną aplikację i ile czasu może zająć takie stworzenie cienkiego klienta i aplikacji serwerowej?

0

generalnie aplikację modyfikuje się z jakiegoś powodu i w sposób taki, aby zrealizować jakieś założenia. Po co chcesz zmienić na cienkiego klienta? Jakie są wytyczne, z czym nie radzi sobie obecna aplikacja, co w przyszłości ma robić cienki klient, czego w chwili obecnej nie będzie mogła zrobić gruba aplikacja. Jak odpowiesz na te pytania to można zasugerować jakieś rozwiązania. BTW jeśli aktualna aplikacja jest napisana w stylu Delphi (zdarzenia i kod w formularzach) to zmienienie jej na cienki klient + serwer wiąże się praktycznie z napisaniem jej od nowa

0

Coś czuję, że będziesz miał pod górkę.
Spróbuj użyć mORMota (open source), chociaż jak mówię, nie jest to tworzenie 'od ręki'.

0

Dzięki za odpowiedzi. @abrakadaber Obecnie aplikacja radzi sobie ze wszystkim i nie ma powodów do przesiadki na cienkiego klienta. Ale... klient sobie zażyczył żeby aplikacja była dostarczona jako cienki klient.
Jest to program GIS-owy z nakładką obliczeniową. Z tego co zdążyłem się zorientować odnośnie cienkiego klienta to chodzi pewnie o cięcie kosztów. Kolejna kwestia to pewnie zarządzanie aplikacją. Korzysta z niej kilkanaście/dziesiąt użytkowników w różnych lokalizacjach klienta. Co jakiś czas aplikacja dostaje nową funkcjonalność albo poprawki błędów. Przy bezpośrednim kontakcie z użytkownikami wiem, że czasem aktualizacja do najnowszej wersji mogła trwać kilkanaście dni zanim informatyk zadziałał. Kiedyś informatyk wspominał, że woli cienkie klienty bo aktualizuje raz centralnie i po kłopocie a tak musi latać po userach. Odnośnie innych wymagań to aplikacja ma być rozdzielona na cienkiego klienta, serwer aplikacji i bazę danych ale to chyba standard w tego typu architekturze. Obawiałem się, że taka opcja może wymagać drastycznych zmian :/
@lampasss nie mam nic przeciwko open source ale w komercyjnych programach wolę tego unikać. Miałem jakiś czas tamu przygodę z open sourcowymi bibliotekami kryptograficznymi - na wsparcie dla nowej wersji Delphi trzeba było czekać kilka miesięcy, przy bibliotekach do kompresji autor porzucił pracę i w nowszym Delphi czasem działa a czasem nie, komponenty do lokalizacji aplikacji (wersje językowe) też nie były rozwijane zbyt szybko a jak już wyszła nowa wersja to bez wsparcia dla unicode w nowym Delphi. Wcześniej miałem jeszcze styczność z JEDI. Wszystko było w porządku dopóki nie próbowałem wgrać nowej wersji. Okazało się, że funkcje i kod z którzy korzystałem zostały wycięte a w innym miejscu zmienione na tyle że program przestał działać poprawnie. Nie mam zbyt dobrego doświadczenia z open source, dlatego wolę trochę zapłacić ale wiedzieć za co płacę i w razie problemów móc liczyć na szybkie wsparcie.

0

Ja to rozumiem, natomiast mORMot to klasa sama w sobie + aktywna społeczność + częste aktualizacje.
Cena, czyli 0 zł za wysoką wydajność jest bardzo atrakcyjna.
Zawsze możesz kupić dedykowany RAD server dla delphi, ale jest drogo i nie wiem jak z wydajnością.
Ale skoro nie pisałeś nic do tej pory serwerowego, to nie ma oczym gadać w zakresie wydajności.

0

w opcji cienki klient + serwer wszelkie obliczenia i "robota" powinna być po stronie serwera. Klient ma generalnie tylko trzy zadania - 1. pokazać dane, 2. pobrać dane, 3. wstępnie sprawdzić wprowadzane przez usera dane (oczywiście serwer także powinien sprawdzać dane, jakie dostaje od klienta).

Zadania jakie przed Tobą stoją to przede wszystkim wybór sposobu komunikacji między serwerem i klientami. To w dużym stopniu zależy od tego czy w przyszłości będzie konieczność łączenia się z serwerem z innych platform niż tych, które obsługuje delphi i/lub pozwolenie na połączenie się aplikacją pisanym w innych językach niż delphi. Możesz wykorzystać popularny i niezależny od platformy i języka REST i JSON. Od strony delphi obsłuży to wspomniany darmowy mORMot. Jest łatwy do opanowania, ma dużą bazę artykułów i pomocy, dużą społeczność i jest otwarty. Wg mnie nie masz się też czego bać, że program nagle padnie. Używam go w kilku projektach i sprawuje się dobrze.
Z drugiej strony możesz zdecydować się na rozwiązanie dostarczone z delphi - DataSnap czy też płatne rozwiązania od RemObject lub RealThinClient SDK.

tu masz kilka artykułów z testami rozwiązań CS
https://datasnapperformance.wordpress.com
https://robertocschneiders.wordpress.com/2012/11/22/datasnap-analysis-based-on-speed-stability-tests/

jak możesz zobaczyć to mORMot jest jednym z najszybszych a dodatkowo najmniej pamięciożernych frameworków.

0

Biorąc pod uwagę porównania wydajności i wykorzystania zasobów to faktycznie wezmę pod uwagę mORMot-a. Pobrałem wersję stable i na początku nie chciała współpracować z Delphi Tokyo. Na szczęści po dwóch zmianach w kodzie ruszyła. Po pobraniu nightly testowa apka ruszyła ale nie przeszło mi kilku testów:

Total assertions failed for all test suits:  14,021 / 29,585,861
! Some tests FAILED: please correct the code.

Fajnie że jest spora dokumentacja ale zanim zapoznam się z 2300 stronami... chciałbym podpytać o jeszcze kilka rzeczy. Jeśli coś nie działa tak jak tutaj to gdzie szukać informacji na ten temat? Forum, dokumentacja, kod źródłowy, czy w wersji nightly może coś nie działać? Dodam, że na początku testową aplikację wywalił mi w trakcie działania antywirus (podczas testów szyfrowania) a po wyłączeniu antywirusa poczekałem aż Windows Firewall załapie że coś mu nie gra bo też zatrzymał na kilkanaście sekund test podczas próby łączenia z serwerem. Obecnie wyrzuciło mi takie błędy:

!  - UTF8: 14,000 / 133,141 FAILED  2.75s
!  - HTTP client encrypted: 21 / 3,087 FAILED  403.79ms
     4818 B, first 702us, done 380.01ms i.e. 2631/s, aver. 380us, 12.3 MB/s
! External database - SynDBRemote
! Exception ESQLDBRemote raised with messsage:
!  TSQLDBServerHttpApi.Create: administrator rights needed to register URI root on port 888

Dla uprawnień administratora dostałem trochę inne błędy:

!  - UTF8: 14,000 / 133,141 FAILED  2.37s
!  - Unlocked: 1 / 2 FAILED  700us
!  - Main thread: 1 / 1 FAILED  162us
!  - Background thread: 1 / 1 FAILED  170us
  Total failed: 3 / 34,571  - Multi thread process FAILED  6.06s

Czy można to olać i uznać że wszystko działa czy coś muszę poszukać z tymi wątkami?
Druga sprawa to kwestia jeszcze samej aplikacji. Pisałem o cienkim kliencie ale dodatkowo mam zapewnić load balancera na 2-3 kopiach aplikacji, interfejsy w Web Services oraz komunikację szyfrowaną (TLS lub SSH). Sprawdzając na szybko wydaje mi się, że będę mógł to zrobić z mORMon-em ale chciałbym się upewnić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1