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

110 天前
 drymonfidelia
4490 次点击
所在节点    程序员
68 条回复
unused
110 天前
出警!
MossFox
110 天前
还在粘还在粘

有 http(s) 这种上层协议了就别担心粘了,帮你分好了的,闭着眼放心用。
seers
110 天前
http 已经在应用层了
laikick
110 天前
字节流怎么粘??
drymonfidelia
110 天前
@laikick 例如前一个包没发完又发出了下一个包
dilu
110 天前
@unused 出现了,“粘包警察”!!!
laikick
110 天前
@drymonfidelia 那不是你代码写的有问题吗? 建议去看看 recv 和 send 的函数
momocraft
110 天前
楼主怎么当上 mod 的 介绍下经验
drymonfidelia
110 天前
@laikick 具体是什么问题?如果两个包长度过大的话确实有可能出现这种情况吧
drymonfidelia
110 天前
如果需要长连接的话是否也可以通过包一层 websocket 来解决 TCP 粘包?
@seers
@MossFox
sigma65535
110 天前
应用层才有包的概念,tcp 是字节流
laikick
110 天前
@drymonfidelia 做好分包啊. 不过为什么要自己实现一个 tcp 协议呢?
neoblackcap
110 天前
http 协议已经是应用层协议了,nginx 会按照一个个 http 请求转发。nginx 的 http 协议解析属于教科书级别,基本上不用考虑人家会写错。
如果你需要长连接的,请去学习一下 TCP 编程。否则对 TCP 模型不了解,你还无脑上,那就是刻舟求剑。
oneisall8955
110 天前
通通抓起来
drymonfidelia
110 天前
@laikick 我就是不想自己实现,所以才问是不是套个 http/ws 就没有粘包问题了啊
ragnaroks
110 天前
如果是想找个类 tcp 的东西拿来用,又不用考虑从中解析数据,那把 websocket 当 tcp 用是可以的,websocket 会确保每次 onMessage 都是一个完整的包
henix
110 天前
nginx? 应该用编程语言的库或框架吧,比如 java 的 netty 或 Python 的 twisted
推荐用 zeromq 的 request-reply 模式,把底层的 TCP 封装了
kingcanfish
110 天前
@unused 可恶啊 被你抢了一楼
LoNeZ
110 天前
有时间发帖, 不如直接问 AI ... 要不先把整个协议栈理解一遍?
iseki
110 天前
他们的意思是没有“粘包”这个说法,你说的现象存在,但你不该将之视为一个问题。

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

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

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

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

© 2021 V2EX