2010-07-17 50 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

相关问题