推荐学习书目
› 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 · Jul 31, 2018 · 4337 views
    This topic created in 3021 days ago, the information mentioned may be changed or developed.
    如题,测试了下,发现不会出现粘包的问题,可是没看懂是什么原因,求大神指导 🎈
    16 replies  •  2018-08-02 10:07:44 +08:00
    BBCCBB
    BBCCBB
    Jul 31, 2018❤️2
    1
    不太可能,可能是你本地测的,没啥压力,没遇到而已, 网络不可能理解你的协议规则, 所以肯定是存在粘包的.
    ns2250225
    ns2250225
    OP
    Jul 31, 2018
    2
    @BBCCBB 刚看了下源码,好像是它读写都有个缓冲区去处理信息
    BBCCBB
    BBCCBB
    Jul 31, 2018
    3
    socket 本身会有一个读写缓存区, 像 java 的 netty 里, 代码里也会有读取和写入缓冲区,

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

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

    现在都 8102 年了,怎么现在还有人用这个民科概念,楼主该看看书更新更新脑子啦!
    skinny
    skinny
    Aug 1, 2018
    11
    呃,楼里不少人该看看书更新更新脑子了。
    salamanderMH
    salamanderMH
    Aug 1, 2018
    12
    tcp 没有所谓的“粘包”问题,本就是流式协议
    danc
    danc
    Aug 1, 2018
    13
    哈啊哈
    ns2250225
    ns2250225
    OP
    Aug 1, 2018
    14
    @all 谢谢大家,现在总算弄明白了,tcp 是流式协议,需要自定义发|收包的协议才能正确通讯~
    reus
    reus
    Aug 1, 2018
    15
    以前的人水平不行,不知道 TCP 是流式协议,以为在发送端 Write 什么,接收端的 Read 也会得到同样的数据,结果在发生合并或者分割的时候,就称之为“粘包”。所以“粘包”根本不是“问题”,问题在于不懂得在应用层做切分。
    lolizeppelin
    lolizeppelin
    Aug 2, 2018 via Android
    16
    粘包半包也就是个说法 拿个词来黑没什么意思吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   794 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 18:53 · PVG 02:53 · LAX 10:53 · JFK 13:53
    ♥ Do have faith in what you're doing.