【问题标题】:iOS client-server app: HTTP or TCP/IP?iOS 客户端-服务器应用程序:HTTP 还是 TCP/IP?
【发布时间】:2011-12-13 01:01:03
【问题描述】:

我即将开始设计/开发客户端-服务器 iOS 应用程序。我倾向于使用 HTTP 请求从/向服务器获取/发布数据,但想确保这是正确的决定。在 http 请求上使用套接字有什么好处。套接字更快吗?我倾向于 http 的一个原因是我还想要一个 Web 界面和 iOS 界面。如果我创建 iOS 和 Web 应用程序都可以访问的 PHP Web 服务,那么我相信我正在减少开发时间。

顺便说一句,我已经阅读了these tutorials,它提供了套接字的一些好处,但没有提到的好处一定会改变游戏规则。除了我不完全理解他所说的“你可以只发送你需要发送的确切数据——使你的协议精简和高效”是什么意思。有人知道他在这里是什么意思吗?

提前致谢。

【问题讨论】:

    标签: ios client-server


    【解决方案1】:

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

    【讨论】:

    • HTTPS 是一个很好的考虑因素,但是在 SSL 中封装你自己的 TCP 协议并不是非常复杂。
    • +1 - 另请注意,并非所有端口都在 3G 网络上路由。确保安全并仅依赖 HTTP/s。
    【解决方案2】:

    就使用哪个而言,您应该坚持使用 HTTP,除非您知道如何保证套接字连接的安全性并能够正确处理超时等。

    他只发送您需要的确切数据的意思是,HTTP 是一种协议,在您尝试发送的消息和发送它的信封之间具有多层抽象。

    HTTP 请求示例:

    (求资料) 获取 /dumprequest HTTP/1.1 主持人:djce.org.uk 用户代理: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 接受语言:en-us,en;q=0.5 接受编码:gzip,放气 接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.7 连接:保持活动 (接收数据) HTTP/1.1 200 正常 日期:2011 年 12 月 13 日星期二 01:09:14 GMT 服务器: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 内容位置:dumprequest.pp 变化:协商 TCN:选择 保活:超时=15,最大值=100 连接:保持活动 传输编码:分块 内容类型:文本/html;字符集=utf-8 *这里是一个相当大的 HTML 文档,数据在正文中的某处*

    套接字请求示例:

    (求资料) 轮询 (接收数据) *数据*

    这比您在现实中使用套接字所做的要简单得多(您可以为请求创建自己的序列化格式以保持它们紧凑,但几乎可以肯定不会只有 1 个“轮询”命令),但是你明白了。您丢弃了一大堆必须解析的额外内容,然后只处理原始数据。

    当然,实际上,您发送的任何数据包都将被包装在 PPP/以太网帧中,如果您使用 ADSL 等,则在 AAL5 帧中。这就是@hotpaw2 的意思。 TCP/IP 上的套接字与 TCP/IP 上的 HTTP 的真实世界效率有时很明显,但有时则不然。这完全取决于您的用例(需要多久发送一次,数据包有多大)。

    【讨论】:

    • 知道了。说得通。感谢您的解释!
    【解决方案3】:

    他的意思是,当使用 HTTP 时,您需要发送 HTTP 协议请求动词(GET、POST 等),并且通常遵守 HTTP 规则。使用套接字时,您可以随意发送您想要的任何内容。
    要回答您的问题,我们需要更多地了解您的申请。 以下是我会坚持的一些规则:

    1. 游戏-tcp
    2. 任何实时 - tcp
    3. 数据库前端(数据的CRUD操作)、社交网络、非实时游戏-- http/restful 服务/json
    4. 您希望作为 API 向企业客户公开的数据库前端 - 考虑 SOAP

    【讨论】:

    • 我不是要复活一个老线程,但是对于游戏来说,UDP也是很常见的,尤其是在FPS中。
    【解决方案4】:

    实际上,您可能想查看 HTML5 的 WebSockets - 它们结合了 http/s 上可配置协议的概念,同时避免了传统 Ajax httprequests 所需的带宽。谷歌它,值得你花时间,它是即将到来的标准,因为谷歌和苹果都在 Safari 和 Chrome 中支持它。等到你完成了你现在要开始的任何事情时,它可能会可靠地安装在那里的每台设备上。

    【讨论】:

      【解决方案5】:

      HTTP 需要发送几十个字节的所需 HTTP 标头信息。通过不使用这些标头字节,原始套接字可能会更有效。但实际上,在通过多个网络跃点进行所有硬件缓冲和打包之后,差异可能无法衡量。

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

      【讨论】:

        猜你喜欢
        • 2010-11-29
        • 1970-01-01
        • 2019-09-23
        • 1970-01-01
        • 2019-08-15
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        • 2011-03-21
        相关资源
        最近更新 更多