如果只用 Nginx 等现成的 HTTP Server 搭建 HTTP 服务,不自行建立 TCP 连接,是否就不用考虑 TCP 粘包这类传输层的问题?

113 天前
 drymonfidelia
4494 次点击
所在节点    程序员
68 条回复
jworg
113 天前
分好几种情况,你想问哪一种,HTTP 与 HTTP2 以及 sni proxy 与 static serve 做的似乎都不一样。如果是最简单的 HTTP + static serve 就是 \r\n 换行魔法呗。
roundgis
113 天前
http 還粘啥。
jiangzm
113 天前
http 服务为什么要考虑 tcp 问题,也不用考虑长链接问题。
Keuin
113 天前
2025 年了还在粘包
xuwen
113 天前
按照协议规定读 tcp 数据,压根就不存在粘包的问题。http 服务本来就已经按照协议规定读包了,所以压根就不存在这种东西
duzhuo
112 天前
感觉可以复习一下计网分层那里
HTTP 作为上层协议,无需关心网络传输细节,只需通过 TCP 接口发送/接收数据。
lqw3030
112 天前
@drymonfidelia #10 建议把基础原理了解下,会高效不少
kitrap
112 天前
粘包这傻叉说法是从哪来的?
kzfile
112 天前
我记得 2018 年论坛里就有粘包警察了
wangtian2020
112 天前
粘包从来不是问题,只是现象,一种符合通信协议的现象。
有些人非要自己不用库,自己去处理连接,那就自己处理这种情况
zhangsanfeng2012
112 天前
粘包,你们读"zhan bao"还是"niao bao"
liu731
112 天前
买了台发动机担心齿轮坏了是吧?
rrfeng
112 天前
最近被 mtu mss gso tso 折腾
粘包能不能粘高级点
mmdsun
112 天前
还好这是 25 年,不然 OP 要被粘包警察喷死。
FishBear
112 天前
websocket http https 都是跑在 tcp 上的哦(除了新的 quic 在 udp 上)
nginx 跑的 http https 也是在 tcp 上的哦

tcp 性能最高 封装一次就损耗一次性能.

粘包这个词不大好,应该是我们 csdn 博客创造出来的概念?
tcp 只关心流,不关心你的数据,你应该自己解数据流.
zwb9412
112 天前
好奇 OP 为啥有 MOD 权限?
darklinden
112 天前
http 和 websocket 是在协议封包的,也就是说如果一个库实现了 http 或者 websocket ,当你使用这个库的时候,面对的接口就只有“包”为单位,不存在“粘”
cheng6563
112 天前
不自行建立 TCP 连接,那你是用 UDP 咯,UDP 那就你自己全得考虑了哦。
sola97
112 天前
笑死,我上个月去面试一家小公司,面试题里就有问粘包是什么
cnuser002
112 天前
楼主的担忧我能理解。比如一个发送端,一个接收端。

我当然希望每次接收端收到,都是一个完整的消息,不就能直接处理了么?

但如果这个消息,真的很大呢? 或许他一次发送不完,那我收到的就不全。我要等,这可就麻烦了呀。同样的,下一次把之前的尾巴,跟下个报文的头給一起发送了,我还得拆,更麻烦了。

嗯。Tcp 它就有这种操作,这不是它的问题,而是它的设计,就是基于 Stream ,像流水一样一直给你灌数据。 底层打散但是保证消息还是前后有序进来的。对于这种流,需要按流的处理方法,收取后进入缓冲区,然后在缓冲区里,根据协议里面的约定,比如固定包头,特殊符号来解析出内容。

而这个就是 HTTP 干的事情。 所以你的需求,用 HTTP 就可以实现。你可以认为 HTTP 接口每次拿到的,就是完整的数据。

WebSocket 也可以。

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

https://ex.noerr.eu.org/t/1125429

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

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

© 2021 V2EX