我即将开始设计/开发客户端 - 服务器iOS应用程序。我倾向于使用HTTP请求从/向服务器获取/发布数据,但是想确保这是正确的决定。使用套接字比http请求有什么好处。套接字更快吗?我倾向于http的一个原因是我还想拥有一个Web界面以及iOS界面。如果我创建iOS和Web应用程序都可以访问的PHP Web服务,那么我相信我正在减少开发时间。
顺便说一句,我已经阅读了these tutorials,它提供了套接字的一些好处,但提到的所有好处都不一定是游戏改变者。除了我不完全理解他的意思,“你可以发送你需要发送的确切数据 - 使你的协议精益和高效。”有谁知道他在这里意味着什么?
提前致谢。
答案 0 :(得分:11)
HTTP只是TCP之上的一层,所以它也是“基于套接字的”。我会使用HTTP,例如因为在需要安全通信的情况下存在HTTPS。 HTTP(S)相对于定制TCP协议的另一个优点是防火墙通常对其使用的TCP端口有一个针孔(HTTP:80,HTTPS:443)。
答案 1 :(得分:7)
就哪个方面而言,你应该坚持使用HTTP,除非你知道如何保证套接字连接的安全性并且能够正确处理超时等。
通过仅发送您需要的确切数据,他的意思是,HTTP是一种协议,在您尝试发送的邮件和发送的信封之间有多层抽象。
HTTP请求示例:
(asking for data) GET /dumprequest HTTP/1.1 Host: djce.org.uk User-Agent: Mozilla/5.0 (Ubuntu; X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0 Accept: 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 Connection: keep-alive (receiving data) HTTP/1.1 200 OK Date: Tue, 13 Dec 2011 01:09:14 GMT Server: Apache/2.2.9 (Ubuntu) DAV/2 SVN/1.5.1 PHP/5.2.6-2ubuntu4.6 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g mod_perl/2.0.4 Perl/v5.10.0 Content-Location: dumprequest.pp Vary: negotiate TCN: choice Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=utf-8 *a rather large HTML document here, with data somewhere in the body*
套接字请求示例:
(asking for data) poll (receiving data) *data*
这比你在实际中使用套接字要简单得多(你可以为请求创建自己的序列化格式以保持它们紧凑但你几乎肯定不会只有1'轮询'命令),但是你明白了。你丢弃了一大堆必须解析的额外内容,并且只关注原始数据。
当然,实际上你发送的任何数据包都将包含在PPP /以太网帧中,如果你使用ADSL等,则会在AAL5帧中。这就是@ hotpaw2所说的。 TCP / IP上的套接字与TCP / IP上的HTTP的实际效率有时是显而易见的,但有时则不然。这完全取决于您的使用案例(需要发送的频率,数据包的大小)。
答案 2 :(得分:6)
他的意思是,在使用HTTP时,您需要发送HTTP协议请求动词(GET,POST等),并且通常遵守HTTP规则。使用插座时,您可以随意发送任何内容 要回答您的问题,我们需要了解您的申请。 以下是我坚持的一些规则:
答案 3 :(得分:1)
实际上,您可能想要查看HTML5的WebSockets - 它们结合了http / s上的可配置协议的概念,同时避免了传统的Ajax httprequests要求的带宽。谷歌,它值得你的时间,它是即将到来的标准,因为谷歌和苹果都支持Safari和Chrome。当你完成现在开始接近的任何事情时,这可能会安全地安装在那里的每台设备上。
答案 4 :(得分:0)
HTTP需要发送几十个字节的必需HTTP标头信息。通过关闭那些头字节,原始套接字可能会更有效。但实际上,在通过多个网络跳跃进行所有硬件缓冲和打包后,差异可能无法衡量。
提供上游网络访问权限的人不像J随机端口号那样阻止HTTP。