2010-07-17 4 views
14

Je suis un nouveau programmeur qui est nouveau pour le développement de l'iPhone et les trucs de serveur. J'ai beaucoup de questions à poser.Comment les applications iPhone interagissent-elles avec le serveur?

Vous n'êtes pas obligé de répondre à toutes les questions; toute aide est appréciée!

  1. Comment les applications iPhone interagissent-elles avec le serveur?
  2. Existe-t-il un type particulier de serveur que je devrais utiliser pour interagir avec l'application iphone avec le serveur?
  3. S'il n'y a pas de type particulier de serveur, quel type de serveur peut-il être utilisé?
  4. Quels sont leurs avantages et leurs inconvénients?
  5. Que devrait faire l'application iPhone (qui est le client) pour interagir avec le serveur?
  6. Comment le serveur sait-il quel iPhone envoyer des données?
  7. Que doit faire le serveur pour interagir avec l'application iPhone (client)?

Répondre

12

Votre meilleur pari est d'avoir votre iPhone faire des requêtes web d'un serveur web. Votre application iPhone agit comme un navigateur Web, envoyant des requêtes http à un serveur Web et analysant la réponse.

Je suis en train de construire une application qui frappe maintenant les scripts PHP que j'ai écrits pour faire fonctionner la base de données, etc, et retourner les objets JSON. Ce n'est pas sophistiqué - j'aurais pu construire un service web SOAP ou RPC entier, mais je ne l'ai pas fait, il fait juste des requêtes GET avec des arguments de chaîne de requête.

Il existe des bibliothèques pratiques que vous voulez connaître. Google "iPhone JSON" pour trouver la bibliothèque JSON écrite par Stig Brautaset, c'est celle que la plupart des gens semblent utiliser. Aussi, plutôt que de vous mettre à travers tous les obstacles que le cadre de client Web intégré de l'iPhone nécessite, allez chercher ASIHTTPRequest, une bibliothèque client web très puissante et très simplifiée.

En règle générale, vous souhaitez effectuer autant de traitements sur le serveur que possible. Par exemple, il y a un endroit dans mon application que je cherche des événements se produisant dans une gamme spécifiée par l'utilisateur de leurs coordonnées locales («dans les 10 milles de moi»). J'ai écrit PHP pour construire une zone de délimitation de latitude/longitude, et interroger à partir de la base de données en fonction de cela. C'est WAY plus rapide que d'amener un tas d'événements vers le bas et ensuite demander à Core Location de calculer leur distance d'où je suis debout.

+0

HTTP est un protocole très bavard. Et si vous avez besoin d'être efficace sur le terrain? – Alan

+1

Merci Dan! J'ai une question, en utilisant la bibliothèque ASIHTTPRequest, je peux obtenir des données à partir d'URL correctement? par exemple, httlp: //someurl.com/somephp.php. Que faire si deux iphones appellent cette URL en même temps? Comment le serveur sait-il quel est l'iPhone? J'ai aussi une autre question. en utilisant ASIHTTPRequest, dans votre cas, vous obtenez l'objet JSON à partir de l'URL à droite? Cela signifie que vous créez l'objet JSON côté serveur et l'envoyez au client iphone, puis à l'intérieur du client, l'application va décoder l'objet JSON et faire un peu de logique? –

+2

@Alan: En pratique, vous pouvez probablement gérer la surcharge de HTTP. Si ce n'est pas le cas, vous avez accès à la bibliothèque des sockets et vous pouvez rouler les vôtres. Si vous en savez assez pour savoir que le protocole HTTP ne fonctionnera pas pour vous, vous en savez probablement assez pour savoir comment parler des douilles brutes! –

4

Vous avez posé pas mal de questions, donc je vais essayer de mon mieux pour répondre à tous:

Tout d'abord, vous devez être un peu plus clair, quel type de serveur parlez-vous? Serveur de messagerie, serveur web, serveur lolcat, ça dépend. Au niveau de base, l'iphone communique via Internet. Internet utilise le protocole Internet, et deux protocoles standard sont construits au sommet de l'IP: Transmission Control Protocol, et User Datagram Protocol. Chacun a ses propres utilisations et fonctions.

TCP/IP et UDP/IP constituent l'épine dorsale de la communication Internet.

Un protocole d'application plus spécifique est construit sur ces deux protocoles Internet, avec un format spécifique à une application donnée. Par exemple, HTTP est le protocole standard pour le transfert de HTML et d'autres informations Web entre un serveur Web et un client de navigateur Web, via TCP.Par conséquent, votre iPhone utilisera le protocole requis pour communiquer avec le serveur. Pour des communications serveur plus courantes, le SDK iOS fournit des méthodes pour construire des messages (par exemple, si vous souhaitez faire une requête HTTP à un serveur Web, vous pouvez utiliser initWithContentsOfURL pour envoyer une requête GET). Si vous avez construit un serveur personnalisé, vous devrez construire le protocole de message requis sur l'iphone et l'envoyer au serveur, en utilisant TCP ou UDP (quel que soit votre serveur personnalisé).

+0

Merci Alan! En ce qui concerne vos questions, est-il possible d'utiliser un serveur de messagerie sur une application qui n'envoie pas d'e-mail? (mais envoie plutôt des données). Ou est-il possible d'utiliser un serveur Web sur une application qui n'envoie pas de données Web mais un courrier électronique? En ce moment je ne sais même pas quel type de serveur je devrais utiliser pour mon application iphone ... Aussi concernant la façon dont la requête HTTP fonctionnerait, est-ce comme si vous utilisiez cette API, initWithContentsOfURL, par exemple, http: // someurl .com/somephp.php et ensuite obtenir une information, supposons qu'il y ait deux iphones qui appellent cette url, alors comment le serveur sait-il quel iphone est-il? –

+1

Eh bien, vous n'utilisez pas un serveur sur une application (un serveur gère les connexions client et gère les demandes de service des clients - votre application serait probablement un client, pas un serveur). Et en général, si vous avez un serveur web, il doit gérer les données web, sinon ce n'est pas un serveur web, mais juste un serveur quelconque. Le type de requêtes traitées par un serveur dicte son type. Re: demandes Web, si vous avez besoin de votre serveur pour savoir quel iphone, vous devez transmettre cette information dans la demande. Vous pouvez utiliser des chaînes de requête: 'someurl.com/somephp.php? Id = davids_iphone' ou passer dans le cadre des en-têtes HTTP auth. – Alan

+0

Avant de prendre de l'avance sur moi-même, demandez-moi pourquoi votre serveur a besoin de savoir ce que l'iPhone demande. page? Qui demande une ressource est généralement géré par "authentification" et il existe un certain nombre de façons d'authentifier une session Web. – Alan

Questions connexes