V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
raiz
V2EX  ›  问与答

移动端 app 通常使用 http api 与后端交互,为什么选择 http 而不是 tcp 呢? 这是我遇到的一个面试题,你们会怎么回答呢?

  •  
  •   raiz · 2018-08-28 11:11:31 +08:00 · 2237 次点击
    这是一个创建于 2270 天前的主题,其中的信息可能已经有所发展或是发生改变。
    12 条回复    2020-07-24 11:50:50 +08:00
    maemual
        1
    maemual  
       2018-08-28 11:18:54 +08:00
    http 简单、开发方便,各种库用起来省事。
    blanu
        2
    blanu  
       2018-08-28 11:23:28 +08:00
    因为加了一层抽象,解决了很多 TCP 的问题。没有什么问题是加一层抽象不能解决的,如果不能,就加两层。
    raiz
        3
    raiz  
    OP
       2018-08-28 11:25:53 +08:00
    答得很简洁啊。 我觉得 http 客户端一方面帮我们实现了基于 tcp 的报文解析,提高了开发效率。另一方面还有历史遗留原因,以前网站都是 http,app 出现,也就过渡过来。
    tanranran
        4
    tanranran  
       2018-08-28 11:26:59 +08:00
    TCP 只是一种协议吧

    Http 协议是建立在 TCP 协议基础之上,好比如 C 和 C++的关系

    除非愿意花大量时间自己基于 TCP 之上在封装一层协议
    ackfin01
        5
    ackfin01  
       2018-08-28 11:27:27 +08:00
    反问,为啥不写 0101 的代码呢,233333
    raiz
        6
    raiz  
    OP
       2018-08-28 11:28:42 +08:00
    @blanu 他就会继续问那么解决了哪些问题呢? 你成功引到了话题到你擅长的领域了
    raiz
        7
    raiz  
    OP
       2018-08-28 11:31:01 +08:00
    @tanranran 那么为啥 linux 内核用 c 不用 c++ :p
    micean
        8
    micean  
       2018-08-28 11:32:59 +08:00
    现成的协议总比没水平的人编的协议好用吧,还有各种现成的库
    raiz
        9
    raiz  
    OP
       2018-08-28 11:33:38 +08:00
    @ackfin01 很形象
    tanranran
        10
    tanranran  
       2018-08-28 11:36:26 +08:00
    @raiz linux 内核也不是纯 C,C 的那一部分与硬件的关系非常密切。
    AndyZhu
        11
    AndyZhu  
       2018-08-28 15:52:30 +08:00
    具体业务具体选择,如果客户端的数据需要保持实时更新,那么就要用 TCP,因为 TCP 适用于操作频繁,点对点的通讯,而且连接数不能太多情况,例如数据库链接, 如果用短连接频繁的通信会造成 socket 错误,而且服务器还需要维持多余的长链接,如果不定期清理多余的长链接,服务器迟早会崩,即使定期清理也会导致一定的服务器资源浪费。

    如果客户端的数据不是不需要频繁操作、实时更新,那么就用 HTTP,因为 HTTP 对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段,做好服务器集群的控制就行了!

    通常客户端都是不需要频繁操作、实时更新的业务,所以就使用 HTTP 啦!
    luckoct
        12
    luckoct  
       2020-07-24 11:50:50 +08:00
    @AndyZhu TCP 不是也可以做短连接吗 哈哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:59 · PVG 08:59 · LAX 16:59 · JFK 19:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.