2010-07-17 94 views
14

我是新開發iPhone和開發服務器的新程序員。我有很多問題要問。iphone應用程序如何與服務器交互?

您不必回答所有問題;任何幫助表示讚賞!

  1. iPhone應用程序如何與服務器進行交互?
  2. 是否有一種特定類型的服務器,我應該用來與服務器交互iphone應用程序?
  3. 如果沒有特定類型的服務器,那麼可以使用什麼類型的服務器?
  4. 他們的優點和缺點是什麼?
  5. iPhone應用程序(客戶端)應該如何與服務器進行交互?
  6. 服務器如何知道哪個iPhone發送數據?
  7. 服務器應該怎麼做才能與iPhone應用(客戶端)交互?

回答

12

最好的辦法是讓你的iPhone發出Web服務器的Web請求。你的iPhone應用程序就像一個Web瀏覽器,向Web服務器發出http請求並解析響應。

我正在構建一個應用程序,該應用程序符合PHP腳本編寫的數據庫工作等,並返回JSON對象。這並不奇怪 - 我可以構建一個完整的SOAP或RPC Web服務,但是我沒有這樣做,它只是通過查詢字符串參數生成GET請求。

有一些方便的圖書館你想知道。 Google「iPhone JSON」可以找到Stig Brautaset編寫的JSON庫,這是大多數人似乎正在使用的。此外,與其將自己置身於iPhone內置的Web客戶端框架所需的所有環節中,不如去獲取ASIHTTPRequest,這是一個非常強大且非常簡化的Web客戶端庫。

作爲一般規則,您希望儘可能在服務器上執行儘可能多的處理。例如,我的應用程序中有一個地方,我正在搜索在用戶指定的本地座標範圍內發生的事件(「距離我10英里以內」)。我寫了PHP來構建一個緯度/經度邊界框,並基於此從數據庫中進行查詢。這樣做比快速推出一堆活動更快,然後要求核心位置計算他們距離我的位置的距離。

+0

HTTP是一個非常健談的協議。如果您需要在線高效,該怎麼辦? – Alan 2010-07-17 02:45:32

+1

謝謝丹! 我有一個問題,通過使用ASIHTTPRequest庫,我可以從url獲取數據的權利?例如httlp://someurl.com/somephp.php。如果兩個iphones同時撥打該網址會怎麼樣?服務器如何知道它是哪一個? 另外我還有一個問題。通過使用ASIHTTPRequest,在你的情況下,你是從url中獲取JSON對象的權利?所以這意味着你要在服務器端創建JSON對象並將它發送給iphone客戶端,然後在客戶端內部,應用程序將解碼JSON對象並執行一些邏輯。 – 2010-07-18 03:01:00

+2

@Alan:實際上,你可以處理HTTP的開銷。如果沒有,那麼你有權訪問套接字庫,你可以推出自己的。如果你足夠了解HTTP知識不適合你,那麼你可能已經足夠了解如何談論原始套接字了! – 2010-07-18 16:26:28

4

你已經問了不少問題,所以我會盡我所能來回答他們:

首先,你需要一個更清楚一點,什麼類型的服務器你在說什麼?電子郵件服務器,Web服務器,lolcat服務器,這取決於。

在基本層面上,iphone通過互聯網進行通信。互聯網使用互聯網協議,並且在IP之上建立了兩種標準協議:傳輸控制協議和用戶數據報協議。每個都有它自己的用途和功能。

TCP/IP和UDP/IP構成了互聯網通信的中樞。

一個更具體的應用協議是建立在這兩種互聯網協議的基礎之上的,具有給定應用的特定格式。例如,HTTP是通過TCP在Web服務器與Web瀏覽器客戶端之間傳輸HTML和其他Web信息的標準協議。

所以,你的iPhone會使用任何協議來與服務器通信。對於更常見的服務器通信,iOS SDK提供了構造消息的方法(例如,如果您希望向Web服務器發送HTTP請求,則可以使用initWithContentsOfURL發送GET請求)。

如果您構建了一個自定義服務器,那麼您需要在iphone上構建所需的消息協議,並使用TCP或UDP(無論您的自定義服務器期望如何)將其發送到服務器。

+0

謝謝艾倫!至於你的問題,是否可以在不發送電子郵件的應用上使用電子郵件服務器? (而是發送數據)。或者是否有可能在應用程序上使用Web服務器,而不是發送Web數據,而是使用電子郵件?現在我甚至不知道我的iPhone應用程序使用什麼樣的服務器...... 關於HTTP請求如何工作,是不是像你使用api,initWithContentsOfURL,例如http:// someurl .com/somephp.php,然後得到一個信息,假設有兩個iphones都調用該url,那麼服務器如何知道它是哪個iphone? – 2010-07-18 02:57:06

+1

那麼你不會在應用上使用服務器(服務器處理客戶端連接並處理來自客戶端的服務請求 - 您的應用可能是客戶端,而不是服務器)。一般來說,如果你有一個Web服務器,它需要處理Web數據,否則它不是一個Web服務器,而只是某種類型的服務器。服務器處理的請求類型決定了它的類型。 Re:Web請求,如果你需要你的服務器知道哪個iphone,你必須在請求中傳遞這些信息。你可以使用查詢字符串:'someurl.com/somephp.php?id = davids_iphone'或者作爲HTTP auth頭文件的一部分傳遞 – Alan 2010-07-18 05:42:55

+0

在我自己領先之前,問一下,爲什麼你的服務器需要知道iphone正在請求頁?誰在請求資源通常由「身份驗證」來處理,並且有許多方法可以對Web會話進行身份驗證。 – Alan 2010-07-18 05:45:07

相關問題