WebSocket 会存在碰包的情况吗?

2018-08-08 11:23:48 +08:00
 e8c47a0d
既然 WebSocket 基于 tcp,那么这里大概能确定的是,在一条连接内,如果服务器或客户端的任意一端连续发消息,另一端也能按顺序收到。但如果,服务器和客户端几乎同时发出一连串消息,那么这些消息的顺序和完整性还能被保证吗?
12157 次点击
所在节点    游戏开发
87 条回复
ericls
2018-08-08 12:26:52 +08:00
可以保证一边发送的顺序是另一边接收的顺序
paw
2018-08-08 12:38:20 +08:00
lz 是从以太半双工的年代穿越过来的吧
e8c47a0d
2018-08-08 12:49:54 +08:00
那么我肯定误解了 packet collision 这个概念,不过短时间内为什么这么多回复?这个节点
e8c47a0d
2018-08-08 12:51:56 +08:00
@InternetExplorer 不了解,只知道 tcp 可以保证完整性和顺序。
est
2018-08-08 12:54:11 +08:00
@ericls 看逻辑。如果只是 hello world 当然可以保证顺序。但是如果 websocket 架构可以异步返回,那么耗时长的肯定在后面返回,就没有顺序了。
@e8c47a0d packet collision 是半双工的概念吧。。websocket 是全双工的。
e8c47a0d
2018-08-08 12:54:40 +08:00
@paw 第一次知道以太半双工的概念
e8c47a0d
2018-08-08 12:56:15 +08:00
@wizardoz 恍然大悟!
noNOno
2018-08-08 12:57:35 +08:00
哈哈,新词
e8c47a0d
2018-08-08 12:58:00 +08:00
@est 看来可能需要自己在 ws 的基础上加一层通讯顺序的检测才能防止
e8c47a0d
2018-08-08 13:01:33 +08:00
@paw 抱歉应用层以下的协议完全没有研究过
e8c47a0d
2018-08-08 13:02:21 +08:00
@wxt 没有这么壮观吧
e8c47a0d
2018-08-08 13:05:35 +08:00
这 sb 帖子竟然飘到了今日最热……
nobird
2018-08-08 13:15:11 +08:00
我告诉你为啥变成了最热…… by 微博观光团
changnet
2018-08-08 13:16:33 +08:00
@est tcp 是有顺序保证的,哪里有异步就可能乱序的说法。异步只是说你程序不阻塞而已,和数据流的顺序有啥关系?
e8c47a0d
2018-08-08 13:16:34 +08:00
@nobird 天啊
est
2018-08-08 13:20:25 +08:00
@changnet

收到 1 请求,worker 开始处理 1,暂时不返回
收到 2 请求,worker 开始处理 2,立刻返回
worker 返回 1 请求的结果

这个时候如果你是客户端如何区分 2 个返回?仅靠顺序可能嘛?
e8c47a0d
2018-08-08 13:21:21 +08:00
@abcbuzhiming 粘包我知道,但分开的这件事有点不确定。
est
2018-08-08 13:23:42 +08:00
@e8c47a0d 粘包 这个倒是实实在在的伪概念。。国内游戏开发师徒制+百度流传出来的。。。
e8c47a0d
2018-08-08 13:23:49 +08:00
@est 所示的情况正是混乱的根源
e8c47a0d
2018-08-08 13:24:57 +08:00
@est 有听说过,当初找不到英文翻译后来才发现是国内来的。

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

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

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

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

© 2021 V2EX