Skocz do zawartości
diordnamurof

Aplikacja Klient (android) <--> Serwer (?).

    Rekomendowane odpowiedzi

    Witam, chciałbym napisać aplikację działającą jak w temacie. Miałaby ona pokazywać w czasie (w miarę) rzeczywistym położenie kilku klientów oraz jakieś informację od nich (typu: postój, jadę itp.) - tak żeby ktoś kto korzysta z aplikacji na serwerze mógł to obserwować (np. na mapie, wraz ze statusem (czekam, jadę). I w konsekwencji zarządzać klientami (kierowcami). Aktualizacja mogłaby być co minutę, dwie.

    Brak mi wiedzy odnośnie hostingów/serwerów itp. Chciałbym żeby mój serwer mógł jednocześnie obsługiwać kliku klientów, ponadto nie wiem czy mając hosting można na nim odpalać jakąś aplikację (napisaną np. w Java) i działać na niej zdalnie (tzn oglądać takie informacje od klientów) - jeżeli tak to jest jakiś pomysł. Albo tak samo dobrze - w przeglądarce.

    Jeżeli każdy klient będzie miał aplikację która łączy się z serwerem, oraz wysyła opisane powyżej dane np. JSON, to nie wiem jak to miałoby wtedy wyglądać napisanie tego serwera.

    Tutaj własnie brak wiedzy, stąd pytanie:

    Jak postawić taki serwer? (tzn czy odbierać te dane po http, php (POST, GET), własny protokół? nie chcę żeby trzeba było odświeżać stronę abywidać było zmianę położenia/informacji od klientów (może AJAX?). A może powinienem mieć Applet Java na stronie korzystający z JSONowych danych? Albo Java Script? Może Google App Engine? Servlety? WebSockets? Polling? - Aż głowa boli od tego :) ) Niestety moja wiedza tutaj jest mała. Stąd prośba:

    Proszę o nakierowanie mnie przez kogoś doświadczonego co byłoby najlepszym rozwiązaniem...

    Może opisanie logiki działania, bo nawet nie wiem czy dobrze kombinuję :)

    Było już kilka podobnych tematów, oto z czym się zapoznałem do tej pory:

    1.) http://forum.android.com.pl/f1311/komunikacja-serwer-aplikacja-burza-ma-zga-w-191959/

    2.) http://forum.android.com.pl/f1311/tracker-i-komunikacja-klient-serwer-89310/

    3.) http://forum.android.com.pl/f1311/komunikacja-pomiae-dzy-urzae-dzeniem-mobilnym-a-serwerem-po-wifi-57776/

    4.) http://forum.android.com.pl/f1311/komunikacja-klient-serwer-32719/

    Ale po przeczytaniu mam tym większy mętlik w głowie... Dużo rozwiązań, nie wiem za które najlepiej próbować się zabrać w moim wypadku.

    Klientów na androidzie mam zamiar zrobić podobnie do tego:

    Client Server Communication In Android Via JSON - Programmers WebLog

    Będę wdzięczny za każdy link który nakieruje mnie do zdobycia odpowiedniej wiedzy :)

    Idealne byłoby zasugerowanie architektury (jak to powinienem zrobić ideowo) i link(i) z info do nauki :)

    Wiem, wyszło długo i chaotycznie. Mam nadzieję że da się czytać (pewnie zobaczę po liczbie odpowiedzi).

    Każdemu kto dotarł aż tutaj dziękuję :)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus

    Rozumiem, że tutaj powstaną dwie aplikacje, tak? Jedna webowa, a druga mobilna

    Ja bym zrobił to w PHP+MySQL, bo najlepiej się mi piszę w tych językach, ale ważniejsze to podzielił projekt na ściśle odzielonę projekty:

    * API (backend) - czyli aplikacja w PHP, która pobiera informacje z MySQLa oraz potrafi zapisać. Przy odczycie można zrobić mechanizm jakiś♥patchy danych, ale raczej nie warto tracić dane (dodać parametr last-sync i potem wysyłać tylko zmiany).

    * Aplikacja webowa (frontend) - jQuery/JS/HTML/Google Maps. Wysyła zapytanie do API i dostaje JSONa, którego parsuje i wyświetla.

    * Aplikacja mobilna - Java/GoogleMaps. Reszta tak samo.

    Nie warto bawić się w WebSocket dla takiego projektu. Raczej interwał. HTTP wiele ułatwi.

    Na niektórych serwerach można uruchamiać własne aplikacje - VPS, ale najcześciej strony piszę się w PHP. Ostatnio node.js, ale do tego już VPS.

    Zakładam, że skoro zadajesz na forum pytanie to nie będziesz utrzymywać dużej ilości użytkowników.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Właśnie na odpowiedź w takim stylu liczyłem :)

    W sumie to nie pomyślałem (a powinienem :facepalm3:) o tym że mogę wykorzystać SQL do takiego właśnie "pośrednictwa" w wymianie danych między aplikacją webową a mobilną, jeżeli dobrze rozumiem to eliminuje to konieczność pisania serwera jako mechanizmu obsługującego wielu klientów jednocześnie (Sql zrobi całą robotę) :) Później w PHP odpytuję tylko o zmiany w SQL i wyświetlam je na stronie :) Dla mnie super i wydaje się mało skomplikowane :ok: Dzięki i leci piwko.

    Nie, aplikację głównie piszę dla własnej satysfakcji i poduczenia się czegoś w praktycznie realizowanym projekcie (do tej pory tylko C++, Java, Sql), jeżeli będzie dodatkowo na tyle użyteczna że sprawdzi się w firmie znajomego, to będzie z niej korzystać 3- 4 użytkowników :)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus

    Nie wysyłaj raw query z frontendu do bazy danych. Zrób jakąś warstwę pośrednicząca na backendzie, czyli jakiś skrypt read-data.php, który wysyła zapytanie do bazy danych i odpowiada Jsonem.

    Raw Query jest zbyt niebezpieczne. Reverse Enginering na Androidzie to łatwizna, a sniffowanie ruchu na Androidzie nawet nie wymaga roota, a poprawnie skonfigorowanego tunela, więc łatwizna. Potem szybko można zmienić zapytanie.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Ok, czyli: z mobilek (Android) wysyłam JSONy, lecą do readData.php, tam zamieniane są już na RawQueries i pobierane jest info z MySQL, później to info na JSON i wykorzystanie w aplikacji webowej. W drugą stronę odwrotnie. :)

    Piszesz że używasz/lubisz PHP (ja Webowej wiedzy nie posiadam), więc może trochę offtopowo: w readData te JSONy łapię po prostu POST/GET? Czy nie będzie problemu z odbieraniem danych przez dwa telefony równocześnie? Czy potrzebne jest jakieś zupełnie inne podejście niż piszę?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    pavloasto

    Ja bym to zrobił "prościej".

    Android wrzuca dane do systemu kolejek (AMQP, konkretnie RabbitMQ na przykład).

    Z kolejki czyta to jakiś serwer, np. w Node.JS który socketem rozsyła do aplikacji webowej.

    Wszystko odbywa się w czasie rzeczywistym, nie trzeba nic odświeżać.

    Może wieczorem uda mi się wrzucić na GItHuba przykładową apkę w androidzie która pisze do kolejek, będziesz mógł zerknąć.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus

    diordnamurof, z mobilek wysyłasz zwykłe zapytanie HTTP

    Przykładowy kod. Pisany tak, aby był jak najprostszy, lecz jednocześnie w miarę bezpieczny. Nie testowany.

    <?php
    $db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
    
    function handleActionUserInfo($user){
    $stmt = $db->prepare("SELECT * FROM users WHERE na=?");
    $stmt->bindValue(1, $id, PDO::PARAM_STR);
    //$stmt->bindValue(2, $name, PDO::PARAM_INT);
    $stmt->execute();
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    $result = [];
    foreach($rows as $row) {
        echo $result[] = array(
        	'name' => $row['nick'],
        	'email' => $row['email']
        	);
    }
    die(json_encode($result));
    }
    
    function errorMissingParams(){
    http_response_code(500);
    die(json_decode(array('error'=>'misssing_params')));
    }
    $action = $_GET['action'];
    if(empty($action))
    errorMissingParams();
    
    if($action === 'userInfo'){
    $user = $_GET['user'];
    if(empty($user))
    	errorMissingParams();
    handleActionUserInfo($user);
    }else if($action === 'otherAction'){
    
    }
    
    
    

    Potem wysyłasz zapytanie HTTP

    api.php?action=userInfo&user=MaLina

    api.php?action=otherAction

    Może ci w tym pomóc okHttp od Square lub libka od Kevina Savickiego. Przydatne też jest Gson od Google.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    bolok

    Najprościej byłoby to signalerem zrobić. Tylko nie wiem jak u ciebie ze znajomością platformy .net. Jeśli chodzi o androida to jest klient signlera (signala - https://github.com/erizet/SignalA). Ja ze znajomy robiłem ostatnio podobny projekt i wszystko super działało. Jakby co to potem mogę to opisać szczegółowo, bo teraz trochę zajęty jestem.

    Takie rozwiązanie może działać bez bazy danych. Ale baza też się przyda jakbyś jakieś archiwalne dane chciał pobierać.

    Co do serwera to my korzystaliśmy z webio.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Dzięki wszystkim za zainteresowanie tematem.

    Dzakus - teraz już rozumiem, wielkie dzięki za fragment kodu, to rozjaśniło wszystko :) Temu rozwiązaniu na pewno podołam, bo jest najbardziej mi znajome :) chęci są więc pewnie wystartuję z Twoją architekturą (WIELKIE DZIĘKI, podając fragment kodu dużo pomogłeś, bo już widzę w 100% o co chodzi). A może w trakcie mi się coś wymyśli nowego :)

    bolok - dotneta nie znam wcale, ja głównie bliżej sprzętu zawsze programowałem (głównie C/C++, ale także Java), ale to nie musi przeszkadzać, projekt jest hobbystyczny i i tak się będę musiał sporo nauczyć (o pisaniu webowych aplikacji nie mam pojęcia, znam podstawy PHP i całkiem dobrze SQL, nic poza tym, więc niezależnie od tego jak to rozwiążę pod względem architektury, to czeka mnie sporo nauki :) ale o to właśnie chodzi. A to brzmi szczególnie zachęcająco:

    Ja ze znajomy robiłem ostatnio podobny projekt i wszystko super działało

    pavloasto -

    Wszystko odbywa się w czasie rzeczywistym, nie trzeba nic odświeżać.
    to traktuję bardzo priorytetowo, więc na pewno spróbuję przynajmniej ogarnąć te kolejki i Node.J o którym zresztą pisał Dzakus w pierwszym swoim poście. Jeżeli mnie to nie przerośnie to może będę tak próbował to zrobić.

    Jeszcze raz dzięki, a póki co to trochę jeszcze pozgłębiam wiedzę na tematy które podrzuciliście, choć już powoli będe się za to zabierał, bo w praktyce najwięcej wychodzi (zwykle braków w wiedzy :PP)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x