Zdalne sterowanie aplikacją przez internet

0

Witam,

Chciałbym sterować moją aplikacją zdalnie przez internet - tzn łączyć się z nią i zdalnie korzystać z udostępnianego przez nią serwisu. Aplikacja będzie zainstalowana na komputerze o bardzo ograniczonej możlwości konfiguracji (RPI2 + Windows 10 IoT Core) więc wszystkie rozwiązania komercyjne w zasadzie odpadają. Aplikacja nie może wymagać żadnych przekierowań portów na routerze firewallu itd itp.

Myślałem zatem o modelu podobnym jak w LogMeIn czy TeamWiever tzn - mamy zewnętrzny serwer(S) który przetrzymuje nazwę użytkownika i hasło za pomoca którego loguje się do niego moja aplikacja (A) i aplikacja (B) za pomocą której mamy sterować aplikajcą (A). Aplikacja (A) co jakiś czas (powiedzmy domyślnie co 2s a po pierwszym od jakiegoś czasu połączeniu co 0,5s) odpytuje serwer (S) o to czy nie ma do niej jakichś zapytań, jeśli są to pobiera je, i odpowiada do serwera (S) który przekazuje zapamiętuje wynik i czeka na odpytanie o niego aplikację (B) mamy zatem

(A)--------->(S)<-----------(B)

Nie jest to jakiś szczególnie wydajny sposób (zwłaszcza to odpytywanie serwera mi się nie widzi), ale prawdę mówiąc na chwilę obecną nie widzę nic innego. Z drugiej strony nie wymaga on żadnej konfiguracji sieci. Aha no i zakładamy że instancji aplikacji(A) będzie kilkaset (nawet do kilku tysięcy) każdy z odrębnym loginem i hasłem, z tym że prawdopodobieństwo że chociaż 30% będzie wymagało jednoczesnego działania jest raczej nieduże - trzebaby przyjąć pesymistyczną opcję kilku tysięcy aplikacji odpytujących serwer co 2s

Czy jest może jakaś technologia która to umożliwia przy wyżej opisanych warunkach ?

0

coś bardzo namieszałeś.

po pierwsze coś MUSI być widoczne w internecie - czy to będzie osobny komputer na którym będzie działał DODATKOWY "serwer" czy ten Twój komputer z aplikacją nie ma znaczenia. TeamWiewer czy Hamachi mają własne serwery (w wielkim skrócie są to zwykłe sieci VPN).
po drugie możesz od razu rozbić to na dwie aplikacje - serwer oraz aplikację właściwą - wtedy niezależnie który komputer będzie widoczny i czy będą one na tych samych czy na różnych komputerach będą działać poprawnie.

Jak by to działało - serwer na dobrą sprawę może mieć za zadanie tylko i wyłącznie przekazywanie poleceń od jednego do drugiego komputera. Każdy klient po podłączeniu się do serwera dostaje unikalny identyfikator. Klient-klient (program, który ma sterować) po podłączeniu dostaje od serwera listę klientów-odbiorników (programy, którymi można sterować). Wysłanie jakiegoś polecenia do klienta-odbiornika polegało by na wysłaniu tego polecenia do serwera wraz z identyfikatorem odbiornika a serwer przesyłał by go do klienta o danym identyfikatorze. I tyle.

Jeśli zakładamy, że połączenie z internetem mamy przez większość czasu to mamy ułatwione zadanie - nie potrzeba aby klient-odbiornik odpytywał co chwilę serwer bo po nawiązaniu połączenia to serwer może wysyłać informacje do klienta.

0

Może faktycznie trochę niejasno napisałem.
Chodzi mi o sytuację jaką opisujesz - zawsze dostępny serwer do którego można się zalogować z każdego miejsca w sieci który pełni role pośrednika między aplikacją A a aplikacją B (przekazuje komunikaty i odpowiedzi z A do B).

Jeśli nie mogę przekierować portów to w zasadzie serwer nie może wysłać żądania ani do A ani do B - to A lub B muszą wysłać żadanie do niego - po to własnie potrzebne mi odpytywanie. Ewantualnie czy jest możliwość bu utrzymywać np pojedyncze połączenie TCP przez np. kilkanaście minut - sytuacja że A połączono z serwerem i to połączenie utrzymuje się przez klkanaście minut minut dopóki jedna ze stron go nie zamknie.

0
W2K napisał(a):

Jeśli nie mogę przekierować portów to w zasadzie serwer nie może wysłać żądania ani do A ani do B - to A lub B muszą wysłać żadanie do niego - po to własnie potrzebne mi odpytywanie.

źle myślisz, ale o tym dalej

Ewantualnie czy jest możliwość bu utrzymywać np pojedyncze połączenie TCP przez np. kilkanaście minut - sytuacja że A połączono z serwerem i to połączenie utrzymuje się przez klkanaście minut minut dopóki jedna ze stron go nie zamknie

Połączenie utrzymuje się aż je zamkniesz albo fizycznie zostanie zerwane (reset modemu/routera, odpięcie kabla itp).
Jeśli klient podłączy się do serwera to połączenie już jest i jest dwukierunkowe - zarówno klient może słać do serwera jak i serwer do klienta. Także jeśli połączenie może być stałe to klient nie musi (a nawet nie powinien) odpytywać co jakiś czas a jedynie czekać na dane od serwera

0

Możesz to zrobić na websocketach.

0

Nie jestem pewien, czy jest to dostępne w UWP dla IoT, ale przecież identyczny problem masz w aplikacjach mobilnych i się go rozwiązuje przez "push notifications".

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