Domanda

Ho un'applicazione J2ME in esecuzione sul mio cellulare (client),

Vorrei aprire una connessione HTTP con il server e mantenere polling per informazioni aggiornate sul server.

Ogni sondaggio effettuato utilizzerà up GPRS byte e risulterebbe costosa nel lungo periodo, come la fatturazione GPRS si basa su pacchetti inviati e ricevuti. C'è un modo di byte efficiente del polling utilizzando il protocollo HTTP ?.

Ho anche sentito parlare di polling lungo, ma non sono sicuro di come funziona e come efficace sarebbe stato.

In realtà il modo preferito per il tuo sarebbe per il server di raccontare l'applicazione telefono che i nuovi dati è pronto per essere utilizzato che polling modo non sarà necessario da fare, però non so di queste tecniche in particolare in J2ME.

È stato utile?

Soluzione

Se si vuole risolvere questo problema utilizzando HTTP solo, polling lungo sarebbe la migliore modo. E 'abbastanza facile. In primo luogo è necessario impostare un URL sul lato server per la notifica (ad esempio http://example.com/notify), e definire un protocollo di notifica. Il protocollo può essere semplicemente come alcune linee di testo e ogni linea è un evento. Ad esempio,

  MSG user1
  PHOTO user2 album1
  EMAIL user1
  HEARTBEAT 300

Il filo di polling al telefono funziona in questo modo,

  1. Effettuare una connessione HTTP a URL notifica. In J2ME, è possibile utilizzare GCF HttpConnection.
  2. Il server si blocca se nessun evento a spingere.
  3. Se il server risponde, ottenere ogni linea e generare un nuovo thread per notificare l'applicazione e di loopback al # 1.
  4. Se la connessione si chiude, per qualsiasi motivo, il sonno per un po 'e tornare al passo 1.

Si deve prestare attenzione ai seguenti dettagli di implementazione,

  1. Tune HTTP timeout sul client e sul server. Più lungo è il timeout, la più efficiente. Timeout di connessione causerà una riconnessione.
  2. Abilita keepalive HTTP sia sul telefono cellulare e server. 3-way handshake del TCP è costoso in termini GPRS quindi cercate di evitarlo.
  3. Rileva i collegamenti non aggiornati. In ambienti mobili, è molto facile da ottenere connessioni HTTP stantii (connessione è andato, ma thread di polling è ancora in attesa). È possibile utilizzare i battiti cardiaci per recuperare. Dire tasso di battito cardiaco è di 5 minuti. Server deve inviare una notifica ogni 5 minuti. Se non ci sono dati per spingere, basta inviare battito cardiaco. Al telefono, il thread di polling deve cercare di chiudere e riaprire la connessione di polling se nulla ha ricevuto per 5 minuti.
  4. errori di connettività Handling attentamente. Lungo polling non funziona bene quando ci sono problemi di connettività. Se non gestita correttamente, può essere l'affare-breaker. Ad esempio, si può sprecare un sacco di pacchetti sulla Fase 4 se il sonno non è abbastanza lungo. Se possibile, controllare la disponibilità GPRS al telefono e mettere il thread di polling in attesa quando GPRS non è disponibile per risparmiare la batteria.
  5. costo Server può essere molto elevato, se non implementata correttamente. Per esempio, se si utilizza Java servlet, ogni applicazione in esecuzione avrà almeno un corrispondente collegamento di polling e il suo filo. A seconda del numero di utenti, questo può uccidere un Tomcat rapidamente :) È necessario utilizzare tecnologie efficienti delle risorse, come Apache Mina.

Mi è stato detto che ci sono altri modi più efficaci per le notifiche push al telefono, come l'utilizzo di SMS e alcuni trucchi a livello IP. Ma hai per fare un po 'basso livello di programmazione non-portatile o incorrere in rischi di violazioni di brevetti. Lungo polling è probabilmente il migliore che si può ottenere con un HTTP unica soluzione.

Altri suggerimenti

Non so esattamente che cosa si intende per "polling", vuoi dire qualcosa come IMAP IDLE ? Una connessione rimane aperto e non v'è alcun overhead per costruire la connessione stessa più e più volte. Come detto, un'altra soluzione possibile è l'intestazione HEAD di una richiesta HTTP (dimenticato che, grazie!).

Se vuoi in questo esercitazione per la base di connessioni HTTP a J2ME.

Spingendo i dati ad un'applicazione / device senza il supporto di spinta (come un Blackberry) non è possibile.

Il TESTA richiesta HTTP è il metodo che fornisce HTTP, se si desidera controllare se una pagina è cambiato o no, è usato dai browser e server proxy per verificare se una pagina è stata aggiornata o meno senza consumare molta banda.

In termini HTTP, la richiesta di testa è lo stesso di ottenere senza il corpo, suppongo che questo sarebbe solo un paio di centinaia di byte al massimo che sembra accettabile se i tuoi sondaggi non sono molto frequenti.

Il modo migliore per farlo è quello di utilizzare la connessione socket. Molti applicazioni come GMail usarli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top