7
votes

Évitez l'interrogation constant de l'iPhone un service Web?

J'ai une application iPhone qui doit être mise à jour dès que possible un changement sur le serveur. Comment puis-je avoir le serveur "PUSH" des données sur iPhone plutôt que l'iPhone interrogeons constamment le service Web?

Edit: je veux que iPhone reçoivent des mises à jour JSON dès que le serveur les traite sans avoir à demander.

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


1 commentaires

Je penserais vraiment sérieusement si vous devez faire cela. En maintenant une connexion ouverte à votre serveur pour recevoir des mises à jour en temps réel - et en gardant ainsi les radios sur le téléphone constamment actif - sucera le pouvoir comme un fou.


4 Réponses :


13
votes

Cela dépend de la façon dont vous êtes aventureux. Il y a deux alternatives ici:

  1. Notifications pushs d'Apple cela fonctionnera même lorsque votre application ne fonctionne pas.
  2. Maintenez la connexion TCP avec votre serveur vous-même. Ce qui nécessite plus d'efforts de programmation de votre part - Nstream de basse niveau et essayant de gérer les cas lorsque l'iPhone décide d'aller de 3G au wifi. Cela peut également manger la batterie assez rapidement. Si vous choisissez ce chemin, Guide de programmation des flux de socket peut être le bon endroit pour partir de.

    Mise à jour: jetez un coup d'œil à ISTREAMLIGHT - Mise en œuvre du protocole LightStreamer pour iPhone . S'il ne correspond pas à votre service Web Comet, vous devez probablement aller jusqu'au niveau inférieur, qui maintient la connexion TCP à l'aide de flux de socket. Pour simplifier votre tâche dans la gestion des structures de données JSON, vous pouvez utiliser Cadre JSON pour Objective-C .


3 commentaires

Par ce que je veux dire si j'ai un service Web que l'iPhone doit obtenir des données, j'ai besoin d'utiliser la comète? Mais comment faire cela sans utiliser les bibliothèques JavaScript?


Non, vous n'avez pas besoin de JavaScript. Comet est juste une idée. La mise en œuvre la plus simple serait une nsurlConnection avec un délai très long fonctionnant de manière asynchrone ou dans un fil non-UI. La connexion doit rester ouverte jusqu'à ce que le serveur dispose de données, auquel cas il devrait envoyer les données et fermer la connexion, et vous l'obtiendrez. Ensuite, ouvrez immédiatement une nouvelle connexion au serveur et commencez à attendre.


@Sidneysm: En fait, vous n'avez pas à fermer la connexion après avoir reçu vos données et ouvrez un autre. C'est trop de ressources qui consomment. Vous recevez un morceau de données, traitez-le (disons que la structure de données JSON série complète) et attendez une autre. Bien sûr, vous feriez mieux de fermer la connexion après une certaine période et d'ouvrir une nouvelle pour éviter les fuites de mémoire.



0
votes

pour le service Web poussez , aka comet Vous voudrez peut-être vérifier cette autre question Stackoverflow Question ici.


0 commentaires

1
votes

Cela a peut-être é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 (ne sait pas à ce sujet.) Vous pourriez jeter un oeil pour voir s'il s'agit de la manière dont vous souhaitez implémenter un client COMET pour votre demande.

J'aimerais honnêtement que je puisse être plus utile. Si vous demandiez un moyen de le faire en JavaScript, je serais tout dessus!

bonne chance,

-Todd


1 commentaires

Yup il y a des tonnes d'informations là-bas pour le faire dans JS. Merci pour le lien que je vais examiner.



3
votes

Ce dont vous avez besoin est une sorte de cadre comète (tel que Light-Streamer). Il existe plusieurs façons de faire cela - connexions de socket ou serveur HTTP qui maintiennent vos sondages jusqu'à ce que certaines données soient disponibles pour livrer ou jusqu'à la période de la requête HTTP. D'autres options incluent l'utilisation des plug-ins tels que Flash ou Silverlight / Moonlight (en supposant qu'une telle chose était possible sur l'iPhone à l'aide de MonoTouch?) Websync de Frozen Mountain, qui prend en charge un cadre de pubsub à base de comète hébergé (appelé WebSync sur demande) pouvant accomplir votre compte. charger. Cela fonctionne bien via JavaScript et a une API assez propre.


1 commentaires

J'ai été très impressionné par le site WebSync (utilisée de leur version Server Express Version, pas à la demande) jusqu'à présent. La documentation est juste un TAD mince pour le moment, mais ils surveillent leur communauté de groupes Google, de sorte que je n'ai jamais eu à attendre plus de quelques heures pour avoir une réponse à une question.