Comunicazione bidirezionale in tempo reale (quasi) in Java

3

Spiegherò prima il contesto del problema. Per un progetto universitario implementerò un'applicazione Android. L'applicazione Android (e altri) sarà in grado di inviare dati a una fonte remota, tale fonte remota sarà anche in grado di inviare messaggi alle applicazioni Android. Ad esempio i messaggi possono essere "applica configurazione x", "qual è il tuo stato". Voglio che la fonte remota sia in grado di inviare questi messaggi a:

  1. Riduci il sovraccarico. Non voglio che i dispositivi Android inviino dati quando non è necessario. Questo utilizza dati e potenza.
  2. In modo che io possa ridimensionarlo, ad esempio la versione 1 potrebbe consentire di verificare quale valore x è presente nelle applicazioni Android, la versione 2 potrebbe consentire di controllare che cosa è ecc.

Ho cercato di implementarlo usando Sockets in Java. Avere l'applicazione Android parlare con la fonte remota è facile. Configuro il router (porta avanti) e tutto è OK. Il problema è avere la fonte remota per parlare con l'applicazione Android. Potrebbero usare hotspot WiFi pubblici, avere il loro 3G su ecc., Non sarei in grado di indirizzare il dispositivo direttamente tramite socket giusto?

L'approccio alla risoluzione del problema non è quello comune, credo, il che mi fa credere che sto cercando di fare qualcosa che non dovrebbe essere fatto. Qualcuno può far luce su questo e offrirmi delle indicazioni?

Molte grazie.

    
posta Thomas Hutchinson 16.01.2013 - 23:25
fonte

2 risposte

3

Come dici tu, in genere è molto difficile o impossibile stabilire una connessione socket originata da un server centrale e tentare di connettersi ai dispositivi mobili. Invece, ciò che si può fare è originare la connessione sul dispositivo mobile, connettersi al server centrale e lasciare il socket aperto in attesa di un comando dal server centrale. Naturalmente la prima cosa che il tuo codice Android farebbe sulla connessione è identificarsi al server centrale, quindi il server centrale sa con chi sta parlando.

Fortunatamente, Google lo ha già fatto per te in Google Cloud Messaging per Android :

Google Cloud Messaging for Android (GCM) is a service that allows you to send data from your server to your users' Android-powered device. This could be a lightweight message telling your app there is new data to be fetched from the server (for instance, a movie uploaded by a friend), or it could be a message containing up to 4kb of payload data (so apps like instant messaging can consume the message directly).

    
risposta data 16.01.2013 - 23:43
fonte
0

Penso che tu stia confondendo la connessione con la comunicazione. La tua applicazione può aprire le comunicazioni con il server usando TCP o UDP e siediti lì senza inviare qualsiasi dato Una pipe bidirezionale è aperta e può essere utilizzata per inviare messaggi avviati alle due estremità della connessione.

    
risposta data 17.01.2013 - 00:43
fonte

Leggi altre domande sui tag