asyncio.Protocol 创建的 TCP 服务器,好像不存在粘包的问题,为什么呢

2018-07-31 16:42:22 +08:00
 ns2250225
如题,测试了下,发现不会出现粘包的问题,可是没看懂是什么原因,求大神指导 🎈
3273 次点击
所在节点    Python
16 条回复
BBCCBB
2018-07-31 17:12:05 +08:00
不太可能,可能是你本地测的,没啥压力,没遇到而已, 网络不可能理解你的协议规则, 所以肯定是存在粘包的.
ns2250225
2018-07-31 17:49:28 +08:00
@BBCCBB 刚看了下源码,好像是它读写都有个缓冲区去处理信息
BBCCBB
2018-07-31 18:10:31 +08:00
socket 本身会有一个读写缓存区, 像 java 的 netty 里, 代码里也会有读取和写入缓冲区,

你可以试一下多写点数据再去读, 应该就有粘包了, 不过没必要,因为理论上他是一定会有粘包的 ==
ETiV
2018-07-31 18:11:53 +08:00
tcpdump 抓一波试试就知道了~
suikator
2018-07-31 18:19:47 +08:00
MeteorCat
2018-07-31 18:20:18 +08:00
没到瓶颈,可能是单人测试环境,试下虚拟机跑脚本请求大量数据
1423
2018-07-31 19:00:26 +08:00
每次看到有人提到粘包这个词,都挺烦的,5 楼帖子里民科说得好
ysc3839
2018-08-01 03:44:44 +08:00
也许开启了 NODELAY ?
owenliang
2018-08-01 08:48:50 +08:00
因为你发的太慢了
skinny
2018-08-01 08:58:26 +08:00
在十几年前我搜索网络编程相关的文章,就被 CSDN 上的文章和帖子里的“粘包”这个民科概念误导过一阵子。

那个时候刚刚接触电脑,又没有读过网络编程相关的书,编程时既想要 UDP 的效果,又想要 TCP 的可靠,还想“简单”,同时明明知道先发送个数据长度或数据类型,亦或是使用分隔符就可以解决的问题,却不知道为什么就是不愿意这么做,然后就搜索相关解决办法看看别人怎么做的,然后就不幸看到“粘包”这个愚蠢的说法,还被误导了一阵子。

现在都 8102 年了,怎么现在还有人用这个民科概念,楼主该看看书更新更新脑子啦!
skinny
2018-08-01 08:59:22 +08:00
呃,楼里不少人该看看书更新更新脑子了。
salamanderMH
2018-08-01 09:59:44 +08:00
tcp 没有所谓的“粘包”问题,本就是流式协议
danc
2018-08-01 10:08:55 +08:00
哈啊哈
ns2250225
2018-08-01 10:36:34 +08:00
@all 谢谢大家,现在总算弄明白了,tcp 是流式协议,需要自定义发|收包的协议才能正确通讯~
reus
2018-08-01 11:43:55 +08:00
以前的人水平不行,不知道 TCP 是流式协议,以为在发送端 Write 什么,接收端的 Read 也会得到同样的数据,结果在发生合并或者分割的时候,就称之为“粘包”。所以“粘包”根本不是“问题”,问题在于不懂得在应用层做切分。
lolizeppelin
2018-08-02 10:07:44 +08:00
粘包半包也就是个说法 拿个词来黑没什么意思吧

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

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

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

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

© 2021 V2EX