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

2018-08-28 11:11:31 +08:00
 raiz
2165 次点击
所在节点    问与答
12 条回复
maemual
2018-08-28 11:18:54 +08:00
http 简单、开发方便,各种库用起来省事。
blanu
2018-08-28 11:23:28 +08:00
因为加了一层抽象,解决了很多 TCP 的问题。没有什么问题是加一层抽象不能解决的,如果不能,就加两层。
raiz
2018-08-28 11:25:53 +08:00
答得很简洁啊。 我觉得 http 客户端一方面帮我们实现了基于 tcp 的报文解析,提高了开发效率。另一方面还有历史遗留原因,以前网站都是 http,app 出现,也就过渡过来。
tanranran
2018-08-28 11:26:59 +08:00
TCP 只是一种协议吧

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

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

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

通常客户端都是不需要频繁操作、实时更新的业务,所以就使用 HTTP 啦!
luckoct
2020-07-24 11:50:50 +08:00
@AndyZhu TCP 不是也可以做短连接吗 哈哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/483881

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX