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

10
我即将开始设计/开发客户端-服务器iOS应用程序。我倾向于使用HTTP请求从/向服务器获取/发送数据,但希望确保这是正确的决定。使用套接字比http请求有什么好处?套接字更快吗?我倾向于使用http的原因之一是我还想拥有Web界面和iOS界面。如果我创建PHP Web服务,iOS和Web应用程序都可以访问,那么我相信我可以减少开发时间。
顺便说一下,我已经阅读了这些教程,其中提供了一些套接字的好处,但没有提到的好处都不是绝对的改变者。除了我不完全理解他所说的“您可以发送您需要发送的确切数据-使您的协议精简高效。”这句话意味着什么?有人知道他在这里的意思吗?
提前致谢。
5个回答

11

HTTP只是TCP的一层,所以它也是“基于套接字”的。例如,在需要安全通信时,我会使用HTTP(S)。 HTTP(S)比自定义TCP协议的另一个优势在于防火墙通常对其使用的TCP端口(HTTP:80,HTTPS:443)有一个针孔。


HTTPS是一个很好的考虑因素,但在SSL中包装自己的TCP协议并不是难以承受的复杂。 - MK.
3
+1 - 还要注意并非所有端口都会在3G网络上路由。请保持安全,并仅依赖于HTTP/s协议。 - Till

7
就选HTTP,除非你知道如何在套接字连接上保证安全,并且可以正确处理超时等问题。发送所需的确切数据意味着HTTP是一个协议,消息和信封之间有几层抽象。这里有一个HTTP请求示例,以及一个套接字请求示例。当然,在现实中,任何发送的数据包都将被包装在PPP / Ethernet帧中,然后在使用ADSL等时再包装在AAL5帧中。@hotpaw2说的就是这个。套接字在TCP / IP上的实际效率相对于HTTP在TCP / IP上的效率有时会有所不同,但有时则没有。这完全取决于您的用例(需要多频繁地发送数据,数据包有多大)。

6
他的意思是,当使用HTTP时,你需要发送HTTP协议请求动词(GET、POST等),并遵守HTTP规则。而使用套接字时,你可以自由地发送任何内容,没有其他限制。
要回答你的问题,我们需要更多了解你的应用程序。以下是我会遵循的一些规则:
  1. 游戏 - TCP
  2. 任何实时性应用 - TCP
  3. 数据库前端(对数据进行CRUD操作)、社交网络、非实时游戏 - http/restful服务/JSON
  4. 想将数据库前端作为API向企业客户公开的 - 考虑SOAP

我不是要重提一个旧的话题,但对于游戏来说,UDP也非常普遍,特别是在第一人称射击游戏中。 - Alon Amir

1
其实,你可能想要查看HTML5的WebSockets - 它们结合了可配置协议的概念,同时避免了传统Ajax http请求所需的带宽。谷歌一下,这值得你花时间去了解,而且它是即将到来的标准,因为谷歌和苹果都在Safari和Chrome中支持它。当你完成现在正在处理的任何事情时,这可能已经可靠地安装在所有设备上了。

0

HTTP需要发送几十个字节的必需HTTP头信息。通过省略这些头字节,原始套接字可能会更加高效。但实际上,在经过所有硬件缓冲和数据包化通过多个网络跃点后,差异可能无法测量。

相比J随机端口号,HTTP更不可能被提供上游网络访问的人所阻止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接