2009-09-24 4 views
6

Ho un'applicazione per iPhone che deve essere aggiornata non appena viene apportata una modifica al server. Come posso fare in modo che il server "spinga" i dati sull'iPhone anziché sull'iPhone che esegue costantemente il polling del servizio web?Evitare che iPhone esegua il polling costante di un servizio Web?

EDIT: voglio th iPhone per ricevere aggiornamenti in JSON non appena il server li elabora, senza dover chiedere.

suppongo poiché il server è un servizio web che questo si chiama cometa, ma non ho ancora visto un buon esempio iPhone.

+0

penserei molto seriamente se è necessario fare questo. Mantenere una connessione aperta al tuo server per ricevere aggiornamenti in tempo reale - e quindi mantenere costantemente attive le radio sul telefono - farà schifo come un matto. –

risposta

13

che dipende da quanto siete avventurosi. Ci sono due alternative qui:

  1. Apple's Push Notifications che funzionerà anche quando la tua app non è in esecuzione.
  2. mantenere la connessione TCP con il server da soli. Il che richiede un maggiore sforzo di programmazione da parte tua: giocoleria NSStream di basso livello e tentativi di gestire casi in cui iPhone decida di passare da 3G a WiFi. Questo può anche consumare la batteria abbastanza rapidamente. Se si sceglie questo percorso, socket streams programming guide può essere il buon punto di partenza.

AGGIORNAMENTO: Date un'occhiata a iStreamLight - Lightstreamer protocol implementation for iPhone. Se non si adatta al tuo servizio web Comet, probabilmente devi scendere al livello inferiore, che sta mantenendo la connessione TCP usando i flussi di socket. Per semplificare l'attività nella gestione delle strutture di dati JSON, è possibile utilizzare JSON framework for Objective-C.

+0

Sicuramente questa non è la risposta corretta. – DevDevDev

+0

Con questo intendo che se ho un servizio web di cui l'iPhone ha bisogno per ottenere i dati, devo usare Comet? Ma come farlo senza usare le librerie Javascript? – DevDevDev

+1

No, non è necessario JavaScript. Comet è solo un'idea.L'implementazione più semplice sarebbe un NSURLConnection con un timeout molto lungo eseguito in modo asincrono o in un thread non UI. La connessione deve rimanere aperta fino a quando il server non ha i dati, nel qual caso dovrebbe inviare i dati e chiudere la connessione, e lo otterrete. Quindi apri immediatamente una nuova connessione al server e inizia ad aspettare. – s4y

0

Per Web Service push, alias Comet si consiglia di cassa quest'altra domanda StackOverflow here.

1

Questo potrebbe essere stato citato in altri post, ma http://code.google.com/p/istreamlight/ è un buon posto per verificare. Usa il server di Lightstreamer (non lo so). Puoi dare un'occhiata per vedere se questo è il modo in cui vorresti implementare un client comet per la tua applicazione.

onestamente Vorrei poter essere più utile. Se stavi chiedendo un modo per farlo in javascript, sarei dappertutto!

Buona fortuna,

-Todd

+0

Yup tehre è un sacco di informazioni là fuori per fare questo in JS. Grazie per il link, lo esaminerò. – DevDevDev

3

Quello che vi serve è una sorta di quadro COMET (come la luce-streamer). Ci sono molti modi per farlo: connessioni socket o server HTTP che si tengono nei sondaggi finché non ci sono dati disponibili da consegnare o fino a quando la richiesta HTTP scade. Altre opzioni includono l'utilizzo di plug-in come Flash o Silverlight/Moonlight (supponendo che una cosa del genere fosse possibile su iPhone usando monotouch?)

Un buon nuovo framework (basato su IIS) COMET che può spostare molti dati in un Un modo molto performante è WebSync di Frozen Mountain, che supporta un framework PubSub basato su COMET ospitato (chiamato WebSync on Demand) che può scalare per adattarsi al tuo carico. Funziona bene tramite Javascript e ha un'API abbastanza pulita.

+0

Fino ad ora sono rimasto molto impressionato dal software WebSync (che utilizzava il loro server express version, non on demand). Al momento la documentazione è appena un po 'sottile, ma monitorano la loro comunità di gruppi di google in modo tale che non ho mai dovuto aspettare più di qualche ora per ottenere una risposta a una domanda. – Matt

Problemi correlati