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? P>
Edit: je veux que iPhone reçoivent des mises à jour JSON dès que le serveur les traite sans avoir à demander. P>
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. P>
4 Réponses :
Cela dépend de la façon dont vous êtes aventureux. Il y a deux alternatives ici: P>
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 . p>
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.
pour le service Web poussez em>, aka comet Vous voudrez peut-être vérifier cette autre question Stackoverflow Question ici. p>
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. p>
J'aimerais honnêtement que je puisse être plus utile. Si vous demandiez un moyen de le faire en JavaScript, je serais tout dessus! P>
bonne chance, p>
-Todd p>
Yup il y a des tonnes d'informations là-bas pour le faire dans JS. Merci pour le lien que je vais examiner.
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?) P> 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. P>
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.
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.