Poszukuje technologi do komunikacji Server Java <-> Android java, PHP, C Object

0

Poszukuje technologi czy informacji jak wykonać komunikacje Miedzy Java a Android Java, PHP, c Object.

Przeanalizowałem już parę rozwiązań ale nie spełniają moich oczekiwań.

  1. SocketServer i Socket - wkurza mnie blokowanie przy read bo chciał bym odsyłać zdarzenia do urządzeń.
  2. SocketServerChannel i SocketChannel - spoko fajnie działa ale nie potrafię lub się nie da komunikować po zwykłym Sokecie.
  3. Http - jeszcze nie testowałem lecz z tego co się orientuje to zdarzenie w tej technologi nie zadzaiła.
1

HTTP REST API, choć pewnie SOAP po HTTP tez by zadziałał

0

A może jakieś tutki czy przykłady zastosowań. Poza tym jak po http serwer ma zgłosić zdarzenie użytkownikowi.

Tak szczerze to raczej to rozwiązanie jest średnie gdyż serwuje wszystko jako http. Myślałem o czymś podobnym do socketów.

0

REST po http nie zadziała? Dlaczego?

0
Drago_86 napisał(a):

Poszukuje technologi czy informacji jak wykonać komunikacje Miedzy Java a Android Java, PHP, c Object.
3. Http - jeszcze nie testowałem lecz z tego co się orientuje to zdarzenie w tej technologi nie zadzaiła.

To akurat na pewno zadziała(jeśli zrobisz dobrze), tak właśnie się robi aplikacje mobilne które łączą się z serwerem

0

Możliwości jest kilka ale ja bym wybrał REST. Jako ciekawostke może też być jakiś message broker np. ActiveMQ ;)

0
Drago_86 napisał(a):

A może jakieś tutki czy przykłady zastosowań. Poza tym jak po http serwer ma zgłosić zdarzenie użytkownikowi.

Tak szczerze to raczej to rozwiązanie jest średnie gdyż serwuje wszystko jako http. Myślałem o czymś podobnym do socketów.

Albo użytkownik musi sam okresowo pytać serwer o zdarzenia, albo musisz trzymać połączenie (websocket). Pierwsze jest łatwiejsze.

0
Drago_86 napisał(a):

Poza tym jak po http serwer ma zgłosić zdarzenie użytkownikowi.

Jakie zdarzenie? Opisz dokładnie o co Ci chodzi.

Wszystko możesz mieć po REST, a do zgłaszania jakichś zdarzeń na serwerze możesz wykorzystać notyfikacje + GCM (Google Cloud Messaging for Android)

0

Mam jeszcze pewną nie jasność codo komunikacji po http przecież to jest bez stanowy port to jakim sposobem jest utrzymywane połączenie tak aby serwer mógł odesłać wiadomość do klienta.

0

Yyy ponieważ każdy pakiet posiada adres nadawcy ?

0

Raczej pasowało by mi coś w rodzaju soketów z wywołaniem klas jak w test.

Czyli wywołanie clasy i metody po pewnych danych z pakietu. Lecz dane przesyłane między elementami różnych typów.

0

@Drago_86, bezstanowy oznacza w tym kontekście, że dwa pomiędzy dwoma żądaniami od jednego klienta protokół nie przechowuje stanu. W obrębie jednego żądania wszystko jest spójne.
To nad czym się zastanawiasz można rozwiązać na kilka sposobów:

  1. ciasteczka, czyli metoda najczęściej wykorzystywana przez przeglądarki
  2. nagłówki z tokenem. W takim przypadku pierwsze żądanie wysyła na serwer nazwę użytkownika i hasło (z wykorzystaniem SSL). Odpowiedzią jest token, który następnie będzie przesyłany każdorazowo w nagłówku. Będzie on identyfikować użytkownika przez pewien czas, albo w ramach sekwencji żądań.
  3. Websockety, czyli otwarcie i utrzymywanie połączenia pomiędzy serwerem, a klientem.
0

I właśnie o to mi chodzi żeby połączenie było utrzymywane cały czas. Tak aby serwer w razie czego mógł odesłać jakieś ważne dane. Chciałem to zrobić na soketach lecz mam problem. Ponieważ nie mogę sobie poradzić z jakimś fajnym systemem encapsulacja tak aby po spakowaniu najlepiej była w postaci json a odebraniu tworzyło mi od razu odpowiednią klasę. lecz w całym tym problemie jest haczyk w każdej z tych klas mamy różne pola i metody próbowałem to zrobić z referencją ale nie mogę sobie poradzić z różnymi polami.

1

Jak serializujesz na serwerze za pomocą np. jacksona to możesz użyć adnotacji @JsonProperty w celu nadania odpowiednich nazw w JSONach. Do tego dochodzą jeszcze widoki JSON > http://wiki.fasterxml.com/JacksonJsonViews, które pozwalają na serializację z uwzględnieniem specyficznych wersji tego co ma być wynikiem :)

0

O teraz bliżej celu lecz zwróć uwagę na to że ja muszę się komunikować nie tylko z javą.

0

Przecież jsona możesz sobie odczytać w każdym języku.

0

Jak zadowola Cię synchroniczna komunikacja (request - response) to warto pomyśleć o REST: po co kombinować? Jak potrzebuejsz asynchronicznych powiadomień (jednostronnie) np. tych w stylu twittera to warto pomyśleć o Server Sent Events.
https://jersey.java.net/documentation/latest/sse.html
Korzystałem z tej implementacji SSE i działało. Konfiguracja jest badzo prosta, dokumentacja dobra.

Jeśli potrzebujesz kolejek (messaging) lub np. subskrybować pewien kanał przez wielu użytkowników (z obsługą opcjonalną transakcji, czy klient odebrał) dobrym wyborem może być STOMP. Można do tego celu użyć np. ActiveMQ. Większość brokerów w tej chwili ten tekstowy protokół jako alternatywa dla ciężkich, binarnych AMQP i JMS.
https://stomp.github.io/
STOMP zwykle używany jest przez WebSocket (jako transport layer): http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html
Wzbogaca to możliwości protokołu WebSockets, który jest bardzo surowy i prosty (tylko cztery zdarzenia close, open, error, message).

Jak ma się to bezproblemowo tunelować przez proxy / firewalle to warto rozważyć Server Sent Events / REST.

W 90% prostych aplikacji jak udostępnianie bez danych np. klientowi mobilnemu zwykły REST daje rade.

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