iOS客户端服务器应用程序:HTTP还是TCP / IP?

我即将开始devise/开发客户端 – 服务器iOS应用程序。 我倾向于使用HTTP请求从/到服务器获取/发布数据,但是要确保这是正确的决定。 通过http请求使用套接字有什么好处。 套接字是否更快? 我倾向于http的一个原因是我也想有一个Web界面以及iOS界面。 如果我创buildiOS和Web应用程序都可以访问的PHP Web服务,那么我相信我正在缩短开发时间。

顺便说一下,我已经阅读了这些教程 , 这些教程提供了套接字的一些好处,但没有提到的好处是必然的游戏转换器。 除了我不完全明白他的意思,“你可以发送你需要发送的确切数据 – 使你的协议精简而高效”。 有人知道他在这里的意思吗?

提前致谢。

HTTP只是TCP之上的一层,所以它也是“基于套接字”的。 我会使用HTTP,例如,因为在需要安全通信的情况下有HTTPS。 HTTP(S)与定制TCP协议的另一个优点是,防火墙通常使用它所使用的TCP端口(HTTP:80,HTTPS:443)的针孔。

在这个方面,你应该坚持使用HTTP,除非你知道如何保证套接字连接的安全性,并能够正确处理超时等。

他的意思是只发送你需要的确切数据,HTTP是一个协议,在你要发送的消息和发送的信封之间有几层抽象层。

HTTP请求示例:

 (要求数据)
 GET / dumprequest HTTP / 1.1
主持人:djce.org.uk
 User-Agent:Mozilla / 5.0(Ubuntu; X11; Linux x86_64; rv:8.0)Gecko / 20100101 Firefox / 8.0
接受:text / html,application / xhtml + xml,application / xml; q = 0.9,* / *; q = 0.8
 Accept-Language:en-us,en; q = 0.5
 Accept-Encoding:gzip,deflate
 Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.7
连接:保持活力

 (接收数据)
 HTTP / 1.1 200 OK
date:2011年12月13日星期二01:09:14 GMT
服务器:Apache / 2.2.9(Ubuntu)DAV / 2 SVN / 1.5.1 PHP / 5.2.6-2ubuntu4.6与Suhosin-Patch mod_ssl / 2.2.9 OpenSSL / 0.9.8g mod_perl / 2.0.4 Perl / v5。 10.0
内容位置:dumprequest.pp
变化:谈判
 TCN:select
保持活跃:超时= 15,最大= 100
连接:保持活跃
传输编码:分块
 Content-Type:text / html; 字符集= utf-8的

 *这里有一个相当大的HTML文档,数据在身体的某个地方*

套接字请求示例:

 (要求数据)
轮询

 (接收数据)
 *数据*

这比现实中的套接字要简单得多(你可以创build你自己的序列化格式来使请求保持紧凑,但你几乎肯定不会只有一个“轮询”命令),但是你得到理念。 你放弃了一大堆必须parsing的东西,然后只是原始数据。

当然,实际上,你发送的任何数据包都将被封装在PPP /以太网帧中,然后在使用ADSL等的AAL5帧中。这就是@ hotpaw2所说的。 TCP / IP上的套接字与TCP / IP上的HTTP套接字的真实世界效率有时是显而易见的,但有时却不是。 这完全取决于你的使用情况(多长时间需要发送一次,数据包有多大)。

他意味着在使用HTTP时,您将需要发送HTTP协议请求动词(GET,POST等),并且一般遵守HTTP规则。 当使用套接字时,您可以随意发送任何你想要的东西,而不是别的。
为了回答你的问题,我们需要更多地了解你的应用程序。 以下是我坚持的一些规则:

  1. 游戏 – tcp
  2. 任何实时 – tcp
  3. 数据库前端(对数据的CRUD操作),社交networking,非实时游戏 – http / restful服务/ json
  4. 数据库前端,你想公开为企业客户的API – 考虑SOAP

实际上,您可能想要查看HTML5的WebSockets – 它们通过http / s结合了可configuration协议的概念,同时避免了传统Ajax httprequests所要求的带宽。 谷歌它,这是值得你的时间,这是即将到来的标准,因为谷歌和苹果都支持Safari和Chrome浏览器。 当你完成所有即将开始的任务时,这可能会安装在每台设备上。

HTTP需要发送几十个字节的所需HTTP头信息。 原始套接字可以通过closures这些头字节来提高效率。 但实际上,经过多跳networking硬件caching和打包之后,差异可能是不可测的。

HTTP提供上行networking访问权限的人比J随机端口号码不太可能被阻止。