2010-07-17 6 views
14

Soy un nuevo programador que es nuevo en el desarrollo de iPhone y cosas de servidor. Tengo muchas preguntas para hacer.¿Cómo interactúan las aplicaciones iphone con el servidor?

No tiene que responder todas las preguntas; cualquier ayuda es apreciada!

  1. ¿Cómo interactúan las aplicaciones de iPhone con el servidor?
  2. ¿Hay algún tipo de servidor que deba usar para interactuar con la aplicación de iPhone con el servidor?
  3. Si no hay un tipo particular de servidor, ¿qué tipo de servidor se puede utilizar?
  4. ¿Cuáles son sus ventajas y desventajas?
  5. ¿Qué debe hacer la aplicación de iPhone (que es el cliente) para interactuar con el servidor?
  6. ¿Cómo sabe el servidor a qué iPhone enviar datos?
  7. ¿Qué debe hacer el servidor para interactuar con la aplicación de iPhone (cliente)?

Respuesta

12

Su mejor opción es tener su iPhone hacen peticiones web de un servidor web. Tu aplicación de iPhone actúa como un navegador web, realiza solicitudes http a un servidor web y analiza la respuesta.

Estoy construyendo una aplicación en este momento que acierta con los scripts PHP que he escrito que hacen funcionar la base de datos, etc., y devuelven objetos JSON. No es elegante: podría haber creado un servicio web completo de SOAP o RPC, pero no lo hice, solo hace solicitudes GET con argumentos de cadena de consulta.

Hay bibliotecas prácticas que desea conocer. Google "iPhone JSON" para encontrar la biblioteca JSON escrita por Stig Brautaset, esa es la que la mayoría de la gente parece estar usando. Además, en lugar de ponerse a través de todos los detalles que requiere el framework de cliente web incorporado de iPhone, obtenga ASIHTTPRequest, una biblioteca de cliente web muy poderosa y MUCHA simplificada.

Como regla general, desea hacer todo el procesamiento posible en el servidor. Por ejemplo, hay un lugar en mi aplicación que estoy buscando eventos que suceden dentro de un rango especificado por el usuario de sus coordenadas locales ("dentro de 10 millas de mí"). Escribí PHP para construir un cuadro delimitador de latitud/longitud y una consulta desde la base de datos basada en eso. Eso es MUCHO más rápido que bajar un montón de eventos y luego pedirle a Core Location que calcule su distancia desde donde estoy parado.

+0

HTTP es un protocolo muy hablador. ¿Qué pasa si necesita ser eficiente en el cable? – Alan

+1

Gracias Dan! Tengo una pregunta: al usar la biblioteca ASIHTTPRequest, puedo obtener datos de las URL ¿no? por ejemplo, httlp: //someurl.com/somephp.php. ¿Qué pasa si dos iphones llaman a esa url al mismo tiempo? ¿cómo sabe el servidor qué iPhone es entonces? También tengo otra pregunta. Al usar ASIHTTPRequest, en su caso, obtiene un objeto JSON de la url, ¿verdad? Entonces eso significa que está creando el objeto JSON en el servidor y lo envía al cliente iphone, y luego dentro del cliente, la aplicación decodificará el objeto JSON y hará algo de lógica, ¿verdad? –

+2

@ Alan: en la práctica, probablemente pueda manejar la sobrecarga de HTTP. De lo contrario, tendrá acceso a la biblioteca de sockets y podrá hacerla suya. Si sabe lo suficiente como para saber que HTTP no funcionará para usted, ¡probablemente sepa lo suficiente como para saber cómo hablar con conectores sin formato! –

4

lo solicitado bastantes preguntas así que voy a intentar mi mejor esfuerzo para responder a todas ellas:

En primer lugar, tiene que ser un poco más claro, qué tipo de servidor que estas hablando? Servidor de correo electrónico, servidor web, servidor lolcat, depende.

En el nivel básico, el iphone se comunica a través de Internet. Internet utiliza el protocolo de Internet y hay dos protocolos estándar integrados en la IP: el Protocolo de control de transmisión y el Protocolo de datagramas de usuario. Cada uno tiene sus propios usos y funciones.

TCP/IP y UDP/IP constituyen la columna vertebral de la comunicación por Internet.

Se construye un protocolo de aplicación más específico encima de estos dos protocolos de Internet, con un formato específico para una aplicación determinada. Por ejemplo, HTTP es el protocolo estándar para transferir HTML y otra información web entre un servidor web y un cliente de navegador web, a través de TCP.

Por lo tanto, su iPhone utilizará el protocolo que sea necesario para conmutar con el servidor. Para una comunicación de servidor más común, el iOS SDK proporciona métodos para construir mensajes (por ejemplo, si desea realizar una solicitud HTTP a un servidor web, puede usar initWithContentsOfURL para enviar una solicitud GET).

Si construiste un servidor personalizado, entonces necesitarás construir el protocolo de mensajes requerido en el iphone, y enviarlo al servidor, usando TCP o UDP (lo que tu servidor personalizado espera).

+0

¡Gracias, Alan! En cuanto a sus preguntas, ¿es posible usar un servidor de correo electrónico en una aplicación que no envía correos electrónicos? (sino que envía datos) ¿O es posible utilizar un servidor web en una aplicación que no envía datos web sino correo electrónico? En este momento ni siquiera sé qué tipo de servidor debería usar para mi aplicación de iPhone ... También con respecto a cómo funcionaría la solicitud HTTP, ¿es como si usara esa API, initWithContentsOfURL, por ejemplo, http: // someurl .com/somephp.php y luego obtener una información, supongamos que hay dos iphones que ambos llaman esa url, entonces, ¿cómo sabe el servidor qué iphone es? –

+1

Bueno, no usaría un servidor en una aplicación (un servidor maneja las conexiones de los clientes y maneja las solicitudes de servicio de los clientes; su aplicación probablemente sea un cliente, no un servidor). Y, en general, si tiene un servidor web, necesita manejar datos web; de lo contrario, no es un servidor web, sino solo un servidor de algún tipo. El tipo de solicitudes que maneja un servidor dicta su tipo. Re: Web requests, si necesita que su servidor sepa qué iphone, debe pasar esa información en la solicitud. Puede usar las cadenas de consulta: 'someurl.com/somephp.php? Id = davids_iphone' o pasar como parte de los encabezados de autenticación HTTP – Alan

+0

Antes de adelantarme, pregunte por qué su servidor necesita saber qué iphone está solicitando. ¿página? Quien está solicitando un recurso generalmente se maneja mediante "autenticación" y hay varias formas de autenticarse en una sesión web. – Alan

Cuestiones relacionadas