到底啥叫流,是因为像水一样不会断吗

2019-03-26 10:25:04 +08:00
 wythechen
9168 次点击
所在节点    Java
64 条回复
azh7138m
2019-03-26 11:20:42 +08:00
@Dxxxxs
@changwei
我手上有一本英文原版的计算机网络,亲爱的你,告诉我,你是在哪里看到这个概念的?
hhhsuan
2019-03-26 11:20:47 +08:00
这种模糊不清的问题,居然还有这么多人回复,请大家不要纵容这种浪费大家时间的行为,直接无视才能让楼主学会怎么提问。
psuwgipgf
2019-03-26 11:48:11 +08:00
@azh7138m 不知道你那本计算机网络里,有没有提到如何分割 tcp 连接发送过来的数据的。不管你承不承认这个概念,他就是有这种问题。而且搜索 粘包 可以很快找到解决方法。
neoblackcap
2019-03-26 11:58:29 +08:00
@psuwgipgf 有这样的问题就是解析器写得不好,应该回去再看看编译相关的书籍,不是去看网络相关的。粘包这词也就中文社区会出现。所谓的粘包唯一正确的解决方法就是写好你的解析器,或者修改你的应用层协议。
noli
2019-03-26 12:14:42 +08:00
@psuwgipgf

分割“流” 本来就是一个伪问题。
你想说的内容其实是,如何设计一个基于流的数据格式或者协议……有这个概念的话就不会有所谓“粘包”。

“粘包” 这个概念也无助于正确地表达本质——缓冲大小读取与数据格式所定义的大小不同步,并且每次读取的数据大小不可预知。
vjnjc
2019-03-26 12:15:22 +08:00
流就是一边接受数据,一边处理嘛。
不像以前需要把整个数据读完。
catror
2019-03-26 12:18:21 +08:00
@psuwgipgf 不管你承不承认这个概念,所谓的解决办法(加包头、固定长度之类的),其实是一个应用层协议了,和 TCP 无关,把 TCP 换成任意流协议都一样。所谓的 TCP 粘包,就是半吊子的人提出来的伪概念。还有人把这个概念翻译成英文,stick package,我也是醉了。
catror
2019-03-26 12:22:51 +08:00
@catror sticky package,少到一个 y
xaw483051011
2019-03-26 12:38:34 +08:00
问个问题啊,BIo 是基于流的,NIo 是基础通道,和流有关系吗
dddd1919
2019-03-26 13:09:25 +08:00
流弊,听懂掌声
GeruzoniAnsasu
2019-03-26 13:12:04 +08:00
不是不会断


流是对无边界数据的统一抽象
一个“流”意味着可以从中读写未事先确定总长度的数据





tcp 没有粘包,但其实再不专业也不会认为粘包是 tcp 协议的概念。首先粘包有明确含义,指在 tcp 传输中接收方读出数据与发送方写入数据同单位 /边界不同步的现象。对于了解 tcp 的人来说他会明白“粘包”是流传输的正常结果,对于不了解的人来说他并不知道 tcp 协议有哪些内容,只是认为“粘包是 tcp 经常发生的问题”——而其实这个印象是对的。

作为一个能明确代表“ tcp 传输接发双方必须自行确定协议并组织数据单位和边界否则由于流式 io 会导致接收方无法按发送单位接收数据”问题的词,“粘包”其实创造得还挺形象,交流业务的时候大可不必这么严谨,讨论技术问题的时候严谨一点是好的,但个人觉得也没必要把这词废除掉。
wweir
2019-03-26 13:49:46 +08:00
人肉封装了几次 TCP 协议,不知“粘包”为何物。

面向流就用面向流的处理手法,面向包就用面向包的处理手法,非要二者混为一谈,自找麻烦
no1xsyzy
2019-03-26 13:57:06 +08:00
@psuwgipgf 你肛门不夹断怪屎粘在一起?
无包哪来的粘包?
@GeruzoniAnsasu 与其说叫粘包不如说叫 “分包不清” 或者 “分包错误”。
还生硬地创造粘包的概念,明明有更直接、更清楚、更准确的叫法。
再说粘包我要拿出 SICP 从头讲流了。
zhujinliang
2019-03-26 13:58:43 +08:00
看一下 RingBuffer 的实现原理就明白了
ghos
2019-03-26 14:05:01 +08:00
其实就是表述上面的问题。。。所谓‘粘包’‘拆包’就是应用层协议的解码问题
HuasLeung
2019-03-26 14:07:30 +08:00
有"方向"的才叫流
richieboy
2019-03-26 14:16:31 +08:00
从头到尾流动,不能后退,不能随机
quadpixels
2019-03-26 15:31:47 +08:00
如果说是计算中的 streaming,也可以指“ cache 对其是无效的,所有数据只用一次”的意思吧。
az031120103
2019-03-26 16:58:45 +08:00
流,哲学概念,也是所有设计必须遵循的一种原则
流,只有一个方向
水从高到低
看书,浏览网页从左到右,从上到下
数据流方向由父到子
等等都是遵循了流只有一个方向的原则
atonku
2019-03-26 19:16:10 +08:00
一群傻吊

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

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

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

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

© 2021 V2EX