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

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

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

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