2009-09-24 6 views
6

J'ai une application iPhone qui doit être mise à jour dès qu'une modification est apportée au serveur. Comment puis-je faire en sorte que le serveur "pousse" les données vers l'iphone plutôt que vers l'iphone interrogeant constamment le service web?Évitez les sondages constants de l'iPhone sur un service Web?

EDIT: Je souhaite que l'iPhone reçoive les mises à jour JSON dès que le serveur les traite, sans avoir à le demander.

Je suppose que le serveur est un service Web que l'on appelle Comet, mais je n'ai pas encore vu un bon exemple d'iPhone.

+0

Je pense vraiment sérieusement si vous avez besoin de faire cela. Maintenir une connexion ouverte à votre serveur pour recevoir des mises à jour en temps réel - et ainsi garder les radios sur le téléphone constamment actif - va aspirer la puissance comme un fou. –

Répondre

13

Cela dépend de votre degré d'audace. Il y a deux alternatives ici:

  1. Apple's Push Notifications qui fonctionnera même lorsque votre application n'est pas en cours d'exécution.
  2. Maintenez la connexion TCP avec votre serveur vous-même. Ce qui nécessite plus d'effort de programmation de votre part - jonglage NSStream de bas niveau et en essayant de gérer les cas lorsque l'iPhone décide de passer de la 3G au WiFi. Cela peut aussi dévorer la batterie assez rapidement. Si vous choisissez ce chemin, socket streams programming guide peut être le bon point de départ.

MISE À JOUR: Jetez un coup d'œil à iStreamLight - Lightstreamer protocol implementation for iPhone. Si cela ne correspond pas à votre service Web Comet, vous devez probablement descendre au niveau inférieur, qui maintient la connexion TCP en utilisant des flux de socket. Pour simplifier votre tâche de gestion des structures de données JSON, vous pouvez utiliser JSON framework for Objective-C.

+0

Sûrement ce n'est pas la bonne réponse. – DevDevDev

+0

Par cela je veux dire que si j'ai un service web dont l'iPhone a besoin pour obtenir des données, j'ai besoin d'utiliser Comet? Mais comment faire cela sans utiliser de bibliothèques Javascript? – DevDevDev

+1

Non, vous n'avez pas besoin de JavaScript. Comet est juste une idée.L'implémentation la plus simple serait une connexion NSURLConnection avec un très long timeout exécuté de manière asynchrone ou dans un thread non-UI. La connexion doit rester ouverte jusqu'à ce que le serveur ait des données, auquel cas il doit envoyer les données et fermer la connexion, et vous l'obtiendrez. Ensuite, ouvrez immédiatement une nouvelle connexion au serveur et commencez à attendre. – s4y

0

Pour le service Web push, alias Comet vous pouvez checkout cette autre question StackOverflow here.

1

Cela peut avoir été mentionné dans l'autre poste, mais http://code.google.com/p/istreamlight/ est un bon endroit pour vérifier. Il utilise le serveur Lightstreamer (vous ne savez pas.) Vous pouvez jeter un oeil pour voir si c'est comme cela que vous souhaitez implémenter un client comète pour votre application.

Je souhaite sincèrement que je pourrais être plus utile. Si vous demandiez un moyen de le faire en javascript, je serais partout!

Bonne chance,

-Todd

+0

Yup tehre est des tonnes d'informations là-bas pour le faire dans JS. Merci pour le lien que je vais examiner. – DevDevDev

3

Qu'est-ce que vous avez besoin est une sorte de cadre COMET (comme streamers lumière). Il existe plusieurs façons de le faire: des connexions de socket ou un serveur HTTP qui conservent vos sondages jusqu'à ce que des données soient disponibles ou que la requête HTTP expire. D'autres options incluent l'utilisation de plug-ins tels que Flash ou Silverlight/Moonlight (en supposant que cela soit possible sur l'iPhone en utilisant monotouch?)

Un bon framework COMET (IIS) qui peut déplacer beaucoup de données dans un WebSync de Frozen Mountain, qui supporte un framework PubSub basé sur COMET hébergé (appelé WebSync on Demand), peut être très performant et capable de s'adapter à votre charge. Cela fonctionne bien via Javascript, et a une API assez propre.

+0

J'ai été très impressionné par le logiciel WebSync (utilisé en version serveur express, pas à la demande) jusqu'à présent. La documentation est juste un peu mince en ce moment, mais ils surveillent leur communauté google groups de telle sorte que je n'ai jamais vraiment dû attendre plus de quelques heures pour obtenir une réponse à une question. – Matt

Questions connexes