V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ns2250225
V2EX  ›  Python

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

  •  
  •   ns2250225 ·
    ns2250225 · 2018-07-31 16:42:22 +08:00 · 3275 次点击
    这是一个创建于 2307 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,测试了下,发现不会出现粘包的问题,可是没看懂是什么原因,求大神指导 🎈
    16 条回复    2018-08-02 10:07:44 +08:00
    BBCCBB
        1
    BBCCBB  
       2018-07-31 17:12:05 +08:00   ❤️ 2
    不太可能,可能是你本地测的,没啥压力,没遇到而已, 网络不可能理解你的协议规则, 所以肯定是存在粘包的.
    ns2250225
        2
    ns2250225  
    OP
       2018-07-31 17:49:28 +08:00
    @BBCCBB 刚看了下源码,好像是它读写都有个缓冲区去处理信息
    BBCCBB
        3
    BBCCBB  
       2018-07-31 18:10:31 +08:00
    socket 本身会有一个读写缓存区, 像 java 的 netty 里, 代码里也会有读取和写入缓冲区,

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

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

    现在都 8102 年了,怎么现在还有人用这个民科概念,楼主该看看书更新更新脑子啦!
    skinny
        11
    skinny  
       2018-08-01 08:59:22 +08:00
    呃,楼里不少人该看看书更新更新脑子了。
    salamanderMH
        12
    salamanderMH  
       2018-08-01 09:59:44 +08:00
    tcp 没有所谓的“粘包”问题,本就是流式协议
    danc
        13
    danc  
       2018-08-01 10:08:55 +08:00
    哈啊哈
    ns2250225
        14
    ns2250225  
    OP
       2018-08-01 10:36:34 +08:00
    @all 谢谢大家,现在总算弄明白了,tcp 是流式协议,需要自定义发|收包的协议才能正确通讯~
    reus
        15
    reus  
       2018-08-01 11:43:55 +08:00
    以前的人水平不行,不知道 TCP 是流式协议,以为在发送端 Write 什么,接收端的 Read 也会得到同样的数据,结果在发生合并或者分割的时候,就称之为“粘包”。所以“粘包”根本不是“问题”,问题在于不懂得在应用层做切分。
    lolizeppelin
        16
    lolizeppelin  
       2018-08-02 10:07:44 +08:00 via Android
    粘包半包也就是个说法 拿个词来黑没什么意思吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:36 · PVG 07:36 · LAX 15:36 · JFK 18:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.