2010-07-17 2 views
14

저는 iPhone 개발자 및 서버에 익숙하지 않은 새로운 프로그래머입니다. 나는 물어야 할 질문이 많다.아이폰 앱은 어떻게 서버와 상호 작용하나요?

모든 질문에 대답 할 필요는 없습니다. 어떤 도움을 주셔서 감사합니다!

  1. iPhone 앱은 서버와 어떻게 상호 작용합니까?
  2. iphone 앱을 서버와 상호 작용하는 데 사용해야하는 특정 종류의 서버가 있습니까?
  3. 특정 종류의 서버가없는 경우 어떤 종류의 서버를 사용할 수 있습니까?
  4. 장점과 단점은 무엇입니까?
  5. 서버와 상호 작용하기 위해 iPhone 앱 (클라이언트)이해야 할 일은 무엇입니까?
  6. 서버가 데이터를 보낼 iPhone을 어떻게 알 수 있습니까?
  7. iPhone 앱 (클라이언트)과 상호 작용하려면 서버가 무엇을해야합니까?

답변

12

가장 좋은 방법은 iPhone에서 웹 서버의 웹 요청을하는 것입니다. iPhone 응용 프로그램은 웹 브라우저처럼 작동하고 웹 서버에 http 요청을 보내며 응답을 구문 분석합니다.

데이터베이스 작업 등을 수행하고 JSON 개체를 반환하는 PHP 스크립트에 지금 당장 적용되는 응용 프로그램을 만들고 있습니다. 그것은 환상적이지 않습니다. SOAP이나 RPC 웹 서비스 전체를 만들었지 만, 그렇게하지 않았고 쿼리 문자열 인수로 GET 요청을 처리합니다.

알아두면 좋은 라이브러리가 있습니다. Stig Brautaset이 작성한 JSON 라이브러리를 찾으려면 Google의 "iPhone JSON"을 사용하십시오. 대부분의 사람들이 사용하는 것 같습니다. 또한 iPhone의 내장 웹 클라이언트 프레임 워크에 필요한 모든 작업을 수행하는 대신 매우 강력하고 간단한 웹 클라이언트 라이브러리 인 ASIHTTPRequest를 사용해보십시오.

일반적으로 서버에서 최대한 많은 처리를 수행하려고합니다. 예를 들어, 내 응용 프로그램에서 사용자 좌표 ("10 마일 이내") 내에서 발생하는 이벤트를 검색하고 있습니다. PHP를 작성하여 위도/경도 경계 상자를 작성하고이를 기반으로 데이터베이스에서 쿼리합니다. 그렇게 많은 이벤트를 가져 와서 Core Location에 내가 서있는 곳으로부터의 거리를 계산하도록 요청하는 것보다 빠릅니다. 서버의 어떤 종류의 얘기

먼저, 조금 명확하게 할 필요가 : 나는 그들 모두 답변을 위해 최선을 노력 할게요 있도록

+0

HTTP는 매우 수다스러운 프로토콜입니다. 효율적인 온라인 연결이 필요한 경우 어떻게해야합니까? – Alan

+1

Dan 감사합니다! 질문이 있습니다. ASIHTTPRequest 라이브러리를 사용하여 URL에서 데이터를 가져올 수 있습니까? 예 : httlp : //someurl.com/somephp.php. 두 아이폰이 동시에 해당 URL을 호출하면 어떻게 될까요? 어떻게 서버가 아이폰인지 알 수 있습니까? 또 다른 질문이 있습니다. 귀하의 경우에 ASIHTTPRequest를 사용하여 URL에서 JSON 객체를 가져 오는 중입니까? 즉, 서버 측에서 JSON 객체를 생성하여 iphone 클라이언트로 보내면 클라이언트 내부에서 JSON 객체를 디코딩하고 일부 논리를 올바르게 수행 할 것입니다. –

+2

@Alan : 실제로는 HTTP의 오버 헤드를 처리 할 수 ​​있습니다. 그렇지 않다면 소켓 라이브러리에 액세스 할 수 있으며 자신을 롤 할 수 있습니다. HTTP가 당신을 위해 작동하지 않는다는 것을 충분히 안다면, 당신은 아마 원시 소켓을 말하는 법을 알만큼 충분히 알고있을 것입니다! –

4

당신은 꽤 몇 가지 질문을 요청했습니다? 이메일 서버, 웹 서버, lolcat 서버, 그것은 다릅니다.

기본 수준에서 아이폰은 인터넷을 통해 통신합니다. 인터넷은 인터넷 프로토콜을 사용하며, 전송 제어 프로토콜 (Transmission Control Protocol)과 사용자 데이터 그램 프로토콜 (User Datagram Protocol)의 두 가지 표준 프로토콜이 있습니다. 각각은 자신의 용도와 기능을 가지고 있습니다.

TCP/IP와 UDP/IP가 인터넷 통신의 백본을 구성합니다.

더 구체적인 응용 프로그램 프로토콜은 주어진 두 가지 인터넷 프로토콜의 상단에 있으며 특정 응용 프로그램의 특정 형식으로 구성됩니다. 예를 들어 HTTP는 TCP를 통해 웹 서버와 웹 브라우저 클라이언트간에 HTML 및 기타 웹 정보를 전송하기위한 표준 프로토콜입니다.

그래서 iPhone은 서버와 통신하기 위해 필요한 프로토콜을 사용합니다. 보다 일반적인 서버 통신의 경우, iOS SDK는 메시지를 생성하는 메소드를 제공합니다 (예를 들어, 웹 서버에 HTTP 요청을하려면, initWithContentsOfURL을 사용하여 GET 요청을 보낼 수 있습니다).

사용자 지정 서버를 만든 경우에는 iphone에서 필요한 메시지 프로토콜을 구성하고 TCP 또는 UDP (사용자 지정 서버에서 기대하는 것)를 사용하여 서버로 보내야합니다.

+0

앨런 감사합니다! 귀하의 질문에 관해서는 이메일을 보내지 않는 앱에서 이메일 서버를 사용할 수 있습니까? (오히려 데이터를 보냄). 또는 웹 데이터를 전송하지 않고 대신 전자 메일을 보내는 응용 프로그램에서 웹 서버를 사용할 수 있습니까? 바로 지금 내 아이폰 앱에 어떤 종류의 서버를 사용해야하는지조차 알지 못한다. HTTP 요청이 어떻게 작동하는지에 관해서는 api, initWithContentsOfURL을 사용하는 것이 맞습니까? 예 : http : // someurl .com/somephp.php 그리고 나서 정보를 얻습니다. 두 개의 아이폰이 모두 그 URL을 호출한다고 가정합니다. 그러면 서버가 아이폰인지 어떻게 알 수 있습니까? –

+1

앱에서 서버를 사용하지 않을 것입니다. 서버는 클라이언트 연결을 처리하고 클라이언트의 서비스 요청을 처리합니다. 앱은 서버가 아닌 클라이언트 일 것입니다. 그리고 일반적으로 웹 서버가 있다면 웹 데이터를 처리해야합니다. 그렇지 않으면 웹 서버가 아니라 일부 유형의 서버입니다. 서버가 처리하는 요청 유형은 유형을 지정합니다. 재 : 웹 요청, 어떤 아이폰인지 알기 위해 서버가 필요하다면 요청에 해당 정보를 전달해야합니다. 'someurl.com/somephp.php? id = davids_iphone' 쿼리 문자열을 사용하거나 HTTP 인증 헤더의 일부로 전달할 수 있습니다. – Alan

+0

자신보다 먼저 아이폰이 무엇을 요청하는지 서버가 알아야합니까? 페이지? 누가 자원을 요청하는지는 일반적으로 "인증"에 의해 처리되며 웹 세션을 인증하는 데는 여러 가지 방법이 있습니다. – Alan

관련 문제