2010-07-17 11 views
14

Sono un nuovo programmatore che è nuovo nello sviluppo di iPhone e roba server. Ho molte domande da porre.In che modo le app per iphone interagiscono con il server?

Non è necessario rispondere a tutte le domande; ogni aiuto è apprezzato!

  1. In che modo le app iPhone interagiscono con il server?
  2. C'è un particolare tipo di server che dovrei usare per interagire con l'app iphone con il server?
  3. Se non esiste un particolare tipo di server, che tipo di server può essere utilizzato?
  4. Quali sono i loro vantaggi e svantaggi?
  5. Cosa deve fare l'app per iPhone (che è il client) per interagire con il server?
  6. Come fa il server a sapere su quale iPhone inviare i dati?
  7. Cosa deve fare il server per interagire con l'app per iPhone (client)?

risposta

12

La soluzione migliore è quella di fare in modo che l'iPhone esegua richieste Web di un server Web. L'app per iPhone funziona come un browser Web, effettua richieste HTTP a un server Web e analizza la risposta.

Sto costruendo un'applicazione in questo momento che colpisce gli script PHP che ho scritto che funzionano nel database, ecc. E restituiscono oggetti JSON. Non è elegante: avrei potuto creare un intero servizio Web SOAP o RPC, ma non l'ho fatto, rende solo richieste GET con argomenti stringa di query.

Ci sono librerie a portata di mano che vuoi sapere. Google "iPhone JSON" per trovare la libreria JSON scritta da Stig Brautaset, è quella che la maggior parte delle persone sembra usare. Inoltre, piuttosto che mettere tutti gli strumenti necessari per il framework del client web incorporato nell'iPhone, procurati ASIHTTPRequest, una libreria client Web molto potente e MOLTO semplificata.

Come regola generale, si desidera eseguire l'elaborazione sul server quanto più possibile. Per esempio, c'è un posto nella mia app che sto cercando per eventi che si verificano all'interno di un intervallo specificato dall'utente delle loro coordinate locali ("entro 10 miglia da me"). Ho scritto PHP per costruire un riquadro di delimitazione di latitudine/longitudine e interrogare dal database basato su quello. È molto più veloce di portare giù un sacco di eventi e poi chiedere a Core Location di calcolare la distanza da dove mi trovo.

+0

HTTP è un protocollo molto chiacchierone. E se fosse necessario essere efficienti sul filo? – Alan

+1

Grazie Dan! Ho una domanda, usando la libreria ASIHTTPRequest, posso ottenere i dati dagli URL giusto? ad esempio, httlp: //someurl.com/somephp.php. Cosa succede se due iPhone chiamano quell'url allo stesso tempo? come fa il server a sapere quale iPhone è allora? Anche io ho un'altra domanda. usando ASIHTTPRequest, nel tuo caso, stai ricevendo l'oggetto JSON dall'URL giusto? Ciò significa che stai creando l'oggetto JSON sul lato server e invialo al client iphone, e quindi all'interno del client, l'app decodificherà l'oggetto JSON e farà qualche logica giusta? –

+2

@Alan: in pratica, è possibile gestire il sovraccarico di HTTP. In caso contrario, hai accesso alla libreria di socket e puoi eseguire il rollover. Se sai abbastanza per sapere che HTTP non funzionerà per te, probabilmente ne sai abbastanza da sapere come parlare socket grezzi! –

4

hai chiesto un bel paio di domande in modo farò del mio meglio per rispondere a tutti:

In primo luogo, è necessario essere un po 'più chiaro, il tipo di server stai parlando? Server email, server Web, server lolcat, dipende.

Al livello di base, l'iphone comunica su Internet. Internet utilizza Internet Protocol e ci sono due protocolli standard costruiti su IP: Transmission Control Protocol e User Datagram Protocol. Ognuno ha i suoi usi e funzioni.

TCP/IP e UDP/IP costituiscono la spina dorsale della comunicazione Internet.

Un protocollo di applicazione più specifico è costituito da questi due protocolli Internet, con un formato specifico per una determinata applicazione. Ad esempio, HTTP è il protocollo standard per il trasferimento di HTML e altre informazioni Web tra un server Web a un client browser Web, su TCP.

Quindi, il tuo iPhone utilizzerà qualsiasi protocollo necessario per comunicare con il server. Per comunicazioni di server più comuni, l'SDK di iOS fornisce metodi per la costruzione di messaggi (ad esempio se si desidera effettuare una richiesta HTTP a un server Web, è possibile utilizzare initWithContentsOfURL per inviare una richiesta GET).

Se è stato creato un server personalizzato, è necessario creare il protocollo dei messaggi richiesto sull'iPhone e inviarlo al server, utilizzando TCP o UDP (qualunque sia il server personalizzato che si aspetta).

+0

Grazie Alan! Per quanto riguarda le tue domande, è possibile utilizzare un server di posta elettronica su un'app che non invia email? (ma piuttosto manda i dati). Oppure è possibile utilizzare un server Web su un'app che non invia i dati Web ma invia invece l'e-mail? In questo momento non so nemmeno che tipo di server dovrei usare per la mia app iphone ... Anche per quanto riguarda la richiesta HTTP, è come se si stesse usando api, initWithContentsOfURL, ad esempio, http: // someurl .com/somephp.php e poi ottenere una informazione, supponiamo che ci siano due iPhone che entrambi chiamano quell'URL, quindi come fa il server a sapere quale iphone è? –

+1

Bene, non utilizzeresti un server su un'app (un server gestisce le connessioni client e gestisce le richieste di servizio dai client - la tua app probabilmente sarebbe un client, non un server). E in generale se hai un server web, deve gestire i dati web, altrimenti non è un server web, ma solo un server di qualche tipo. Il tipo di richieste che un server gestisce determina il suo tipo. Ri: Richieste web, se hai bisogno del tuo server per sapere quale iphone, devi passare tali informazioni nella richiesta. È possibile utilizzare le stringhe di query: 'someurl.com/somephp.php? Id = davids_iphone' o passare come parte degli header dell'autenticazione HTTP – Alan

+0

Prima di anticipare me stesso, chiedere, perché il server deve sapere che cosa sta richiedendo l'iphone pagina? Chi richiede una risorsa viene in genere gestito da "autenticazione" e vi sono diversi modi per eseguire l'autenticazione di una sessione Web. – Alan

Problemi correlati