raiz
V2EX  ›  问与答

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

  •  
  •   raiz · Aug 28, 2018 · 2676 views
    This topic created in 2850 days ago, the information mentioned may be changed or developed.
    12 replies    2020-07-24 11:50:50 +08:00
    maemual
        1
    maemual  
       Aug 28, 2018
    http 简单、开发方便,各种库用起来省事。
    blanu
        2
    blanu  
       Aug 28, 2018
    因为加了一层抽象,解决了很多 TCP 的问题。没有什么问题是加一层抽象不能解决的,如果不能,就加两层。
    raiz
        3
    raiz  
    OP
       Aug 28, 2018
    答得很简洁啊。 我觉得 http 客户端一方面帮我们实现了基于 tcp 的报文解析,提高了开发效率。另一方面还有历史遗留原因,以前网站都是 http,app 出现,也就过渡过来。
    ByteRan
        4
    ByteRan  
       Aug 28, 2018
    TCP 只是一种协议吧

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

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

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

    通常客户端都是不需要频繁操作、实时更新的业务,所以就使用 HTTP 啦!
    luckoct
        12
    luckoct  
       Jul 24, 2020
    @AndyZhu TCP 不是也可以做短连接吗 哈哈哈
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5184 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 01:30 · PVG 09:30 · LAX 18:30 · JFK 21:30
    ♥ Do have faith in what you're doing.