Sposoby na niezawodne zdalne sterowanie aplikacją

0

Witam. Będę w Delphi pisał pewien program, jednak pomyślałem o tym aby silnik był w Delphi (np. konsolowo), ale GUI na zewnętrznym serwerze by użytkownik mógł bez przeszkód sterować z dowolnego miejsca, zarówno przez pc w domu, laptopa, smartfona i wszystko inne wyposażone w przeglądarkę.

Od razu na myśl przychodzą prymitywne trojany sterowane przez sockety, ale nie o takie programy chodzi bo tu wystarczy że jesteśmy po za NAT i się nie połączymy z komputerem ;)

Jak już mówiłem GUI ma znajdować się na MOIM serwerze WWW.
Podobną funkcję "remote" świadczy wielu producentów programów np. utorrent, logmein i inne, tak by możliwe było połączenie bez względu czy komputer jest w NAT czy po za NAT, czy ma zmienne ip czy nie itp i zdalne sterowanie aplikacją.

I tu pojawia się problem. Z jakich usług, na jakich protokołach działa takie coś? Nigdy nie pisałem aplikacji sterowanej przez WWW, a tutaj było by to bardzo przydatne.
Czy to powinno działać tak:

użytkownik (przeglądarka www) <-> serwer dedykowany (php) <-> komputer użytkownika (delphi)

czy może tak?

użytkownik (przeglądarka www) <-> serwer dedykoiwany (php <-> serwer delphi) <-> komputer użytkownika (delphi)

Do połączeń mógłbym użyć np. globalnej sieci hamachi, ale wydaje mi się to mało rozsądne i wygodne, tym bardziej że posiadam własny serwer dedykowany to po co korzystać z pośredników?

Komunikacja musi odbywać się rzecz jasna w obie strony, czyli w przeglądarce wysyłamy polecenia, ale odbieramy też wyniki od klienta.

Czy ktoś ma jakieś koncepcje jak by to rozwiązać? Jakieś gotowe rozwiązania, artykuły?

Nigdy nie zagłębiałem się w ten temat, ale skoro taki np. logmein może działać bez względu czy mamy ip zewnętrze czy wewnętrzne itp to jakoś to działać musi.

Proszę mnie jakoś naprowadzić jeśli ktoś ma doświadczenie w tej kwestii. Pozdrawiam

0

Chyba chodzi o UDP hole punching.
Ewentualnie jeśli chcesz mieć coś w stylu serwerów pośredniczących, możesz użyć serwerów Gadu Gadu bądź jakiegoś innego protokołu IM. Do GG jest opis na necie (i do wielu innych też): http://toxygen.net/libgadu/protocol/

0

Dzięki, poczytam więcej o UDP

0

Miałem kiedyś na studiach laborkę z Linuksa, na której pisaliśmy bota dla XMPP w Perlu. Pewnie dałoby radę podpiąć jakiś inny język programowania pod to. Nie musiałbyś pisać do tego GUI. Obsługiwałbyś swoją aplikację poprzez komendy wysyłane komunikatorem sieci XMPP na specjalnie spreparowany kontakt, który odsyła odpowiedź. Pod Androidem mam klienta XMPP np. Xabber, na PC mam Gajim i wiele innych... Polecam takie rozwiązanie :)

0

W Delphi można postawić swój serwer http jest np. IdHTTPServer choć nie mam pojęcia na ile takie rozwiązanie jest bezpieczne i wydajne. Wtedy postawił byś sobie na serwerze dedykowanym swój program w Delphi pod windows, który robiłby co ma robić i przy okazji serwował stronę. Inne rozwiązanie to np. postawić jakąś stronę w PHP i łączyć się po TCP/IP z twoim programem w delphi wystawiając swoje API - wtedy albo stawiasz oba na dedyku, albo swój program na dedyku i korzystasz z tańszego hostingu stron WWW.
Zewnętrzne IP jest wymagane do tego by osoby za NAT mogły się podłączyć do twojego serwera i tego nie da się przeskoczyć. Jeśli ani jedna ani druga strona nie ma zewnętrznego IP (obie za NAT) to twój serwer musi pośredniczyć w komunikacji.
Aha wspomniałeś jeszcze o przesyłaniu GUI tu chyba by zadziałał TeamViewer - nie mam pojęcia co chcesz osiągnąć ale ten program ma możliwość przejścia w stan prezentacji i np. kilka osób "ogląda" sesję na żywo. Jednak sterowanie w ten sposób programem zakończy się katastrofą gdy każdy będzie przy tym kręcił.

0

@szopenfx nie do końca zrozumiałeś o co mi chodzi, ale to z mojej winy bo piszę dość chaotycznie, gdyż nie mogę podać więcej szczegółów.

@Spine Zarówno o Jabberze/XMPP jak i wcześniej wymienionym UDP myślałem ale chciałem poznać opinię innych programistów. Wydaje mi się że jednak Jabber który jest otwartym i gotowym rozwiązaniem będzie lepszy niż pisanie wszystkiego od zera pod UDP.
Do PHP znalazłem dużo przykładów, do Delphi znacznie gorzej ale powinno dać radę.

Jednak nie jestem specem PHP, i nie wiem jak rozwiązać sprawę ciągłego odbierania poleceń przez PHP, by działało to w dwie strony. Wysyłanie to prostota, kilka linii kodu, ale co z odbieraniem.

Każdy użytkownik będzie sterował własną aplikacją, a więc oczywista sprawa że klient na PC w Delphi powinien posiadać osobne indywidualne konto Jabbera. Tylko teraz czy na serwerze w PHP też powinno być do każdego osobne konto, czy jednak jedno wspólne i ciągle trwająca sesja, a to do kogo trafi odpowiedź zawarte w wiadomości.

No i jak to najprościej obsłużyć Live. Ktoś w przeglądarce kliknie przycisk z jakąś funkcją np. "pokaż liste", skrypt PHP wysyła komunikat do klienta o danym numerze "zadanie:lista", klient odbiera w Delphi i wysyła odpowiedź "treść listy" na numer serwera. Serwer odbiera wiadomość i zapisuje w mysql do odpowiedniej tabelki a w przeglądarce skrypt co np. sekunde odświerza i pokazuje zawartość tabelki np. w AJAX, gdzie w końcu pojawi się nasza lista?

Czy może jednak jest jakaś inna metoda na obsługę, czyli jak mówiłem że po stronie serwera dedykowanego każdy ma też osobny numer na który klient wysyła przykładową listę, a w przeglądarcę skrypt w danej technologii odbiera ją i wyświetla bezpośrednio za pomocą jabbera?

Wiem że to wszystko pomieszane, ale już na początku muszę ustalić podstawową zasadę działania, by potem zbyt nie mieszać i nie ugrzęznąć.

PS
Wiem że łatwiej było by napisać osobny program sterujący na Androida zamiast na przeglądarkę, ale chcę by to działało na wielu platformach, zarówno na laptopie, smartphonie z androidem, windows phonie, iphonie itp, więc działanie przez przeglądarkę WWW jest najbardziej uniwersalne.

PS2 myślałem aby tą komunikację zapewnić bezpośrednio przez Flash, ale nie lubię tej technologii i ona się już starzeje i wycofuje z użytku. Na małych urządzeniach przenośnych też z nią różnie, więc wolę w tym nie grzebać.

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