2009-09-24 12 views
6

Tengo una aplicación de iPhone que debe actualizarse tan pronto como se realice un cambio en el servidor. ¿Cómo puedo hacer que el servidor "envíe" datos al iPhone en lugar de que el iphone realice sondeos constantemente en el servicio web?¿Evita el sondeo constante de iPhone de un servicio web?

EDITAR: Quiero que el iPhone reciba actualizaciones JSON tan pronto como el servidor las procese, sin tener que solicitarlas.

Supongo que, dado que el servidor es un servicio web, esto se llama Comet, pero todavía no he visto un buen ejemplo de iPhone.

+0

Pensaría seriamente si necesita hacer esto. Mantener una conexión abierta con su servidor para recibir actualizaciones en tiempo real y mantener las radios en el teléfono constantemente activas absorberá la energía como una locura. –

Respuesta

13

Eso depende de qué tan aventurero sea. Hay dos alternativas aquí:

  1. Apple's Push Notifications que funcionarán incluso cuando su aplicación no esté en ejecución.
  2. Mantenga la conexión TCP con su servidor usted mismo. Lo que requiere más esfuerzo de programación de usted: malabarismos de bajo nivel de NSStream e intentar manejar casos cuando el iPhone decide pasar de 3G a WiFi. Esto también puede consumir la batería bastante rápido. Si elige esta ruta, socket streams programming guide puede ser el buen lugar para comenzar.

ACTUALIZACIÓN: Eche un vistazo a iStreamLight - Lightstreamer protocol implementation for iPhone. Si no se ajusta al servicio web de Comet, es probable que deba bajar al nivel inferior, que mantiene la conexión TCP utilizando flujos de socket. Para simplificar su tarea en el manejo de estructuras de datos JSON, es posible que desee utilizar JSON framework for Objective-C.

+0

Seguramente esta no es la respuesta correcta. – DevDevDev

+0

Con eso quiero decir que si tengo un servicio web del que el iPhone necesita obtener datos, ¿necesito usar Comet? Pero, ¿cómo hacer esto sin usar las bibliotecas de Javascript? – DevDevDev

+1

No, no necesita JavaScript. Comet es solo una idea.La implementación más simple sería una NSURLConnection con un tiempo de espera muy largo ejecutándose de forma asíncrona o en un hilo que no sea UI. La conexión debe permanecer abierta hasta que el servidor tenga datos, en cuyo caso debe enviar los datos y cerrar la conexión, y la obtendrá. Luego, abra inmediatamente una nueva conexión al servidor y comience a esperar. – s4y

0

para el servicio Web empuje, también conocido como el cometa puede que desee a la caja de esta otra pregunta StackOverflow here.

1

Esto puede haber sido mencionado en el otro post, pero http://code.google.com/p/istreamlight/ es un buen lugar para salir. Utiliza el servidor lightstreamer (no lo sé). Puede echar un vistazo para ver si así es como le gustaría implementar un cliente cometa para su aplicación.

Honestamente, me gustaría poder ser más útil. Si estuvieras preguntando por una forma de hacer esto en javascript, ¡estaría completamente terminado!

Buena suerte,

-Todd

+0

Yup tehre es toneladas de información por hacer esto en JS. Gracias por el enlace lo investigaré. – DevDevDev

3

Lo que necesita es algún tipo de marco COMET (como la luz-streamer). Hay varias maneras de hacerlo: conexiones de socket o servidor HTTP que se mantienen en sus sondeos hasta que haya algunos datos disponibles para entregar o hasta que la solicitud HTTP agote el tiempo de espera. Otras opciones incluyen el uso de complementos como Flash o Silverlight/Moonlight (suponiendo que tal cosa fuera posible en el iPhone con monotouch)

Un nuevo marco COMET nuevo (basado en IIS) que puede mover una gran cantidad de datos en un Una forma muy eficiente es WebSync de Frozen Mountain, que admite un marco de PubSub basado en COMET alojado (llamado WebSync on Demand) que puede escalar para adaptarse a su carga. Funciona muy bien a través de Javascript y tiene una API bastante limpia.

+0

He estado muy impresionado con el software WebSync (que usa su versión expresa de servidor, no bajo demanda) hasta el momento. La documentación es un poco escasa en este momento, pero monitorean su comunidad de grupos de Google de tal manera que nunca tuve que esperar más de unas pocas horas para obtener una respuesta a una pregunta. – Matt

Cuestiones relacionadas