V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
huskyui
V2EX  ›  Java

前端用 websocket 写入数据到后端 netty 时,丢数据

  •  
  •   huskyui · Oct 31, 2023 · 3273 views
    This topic created in 922 days ago, the information mentioned may be changed or developed.

    大致流程

    目前前端就是 javascript 里面的 websocket. 然后上传一张图片的字节数组到后端 netty ,后端 netty 读取二进制 Frame 后,再返回出来到前端

    问题

    前端的图片在 130kb 以下,是可以正常上传,返回。 但是大一点的图片,就会丢失,只能返回大概 130kb 的部分数据。打断点,从前端发送时,字节数组的大小是正确的,但是后端接受就丢失了

    10 replies    2023-11-01 18:57:13 +08:00
    kilasuelika
        1
    kilasuelika  
       Oct 31, 2023 via Android
    要看后端用的什么 websocket 库,有些可能有默认的大小限制
    huskyui
        2
    huskyui  
    OP
       Oct 31, 2023
    @kilasuelika 用的是 netty 实现的 websocket
    huskyui
        3
    huskyui  
    OP
       Oct 31, 2023
    大概找到原因了,大文件传输时,刚刚抓包发现,报了个错,TCP WINDOW FULL
    kuanat
        4
    kuanat  
       Nov 1, 2023
    看到 130kb 我的第一反应是 128KiB 或者 131072 字节,有少部分平台是 128000/124928 这样,大概率是某个参数限制了 128KiB 。

    如果你是用 wireshark 之类抓包的话,TCP WINDOW FULL 有可能是 false positive 的误报。Wireshark 的判断逻辑是,收方那边说我的 TCP Window 是 xxx ,然后发方开始发送,这中间如果没有收方的 ACK 的话,发送超过 xxx 之后,wireshark 会认为 TCP WINDOW FULL 。换句话说,你的 TCP 底层实现没有特殊处理的话,是无法在发送方真正发送超过 xxx 的。

    加上你说抓包发现前端能够正确发包,那说明是后端的限制而非 TCP 层面的。

    我估计应该是 netty websocket 某个与 frame size 相关的参数限制了 128KiB ,另外还应该有个 message 层面的限制。
    julyclyde
        5
    julyclyde  
       Nov 1, 2023
    @huskyui 首先你用 websocket 就不该关注 TCP 的相关信息吧
    huskyui
        6
    huskyui  
    OP
       Nov 1, 2023
    @kuanat 昨天用 wireshark 看的时候,我看里面的 length 缺失了。netty 里面我确实设置
    huskyui
        7
    huskyui  
    OP
       Nov 1, 2023
    @julyclyde 问了 chatgpt,和通义千问,没找到大致原因。只能死马当活马医
    julyclyde
        8
    julyclyde  
       Nov 1, 2023
    你这个所谓“丢失了”是指没收到中间这一段 130k 但是收到 130k 之后的内容吗?
    还是从 130k 开始往后全都丢失了?
    huskyui
        9
    huskyui  
    OP
       Nov 1, 2023
    @julyclyde 我 netty 那边打断点,只收到了前面 130k 数据
    julyclyde
        10
    julyclyde  
       Nov 1, 2023
    @huskyui 把 netty 换掉试试呢?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   954 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 19:10 · PVG 03:10 · LAX 12:10 · JFK 15:10
    ♥ Do have faith in what you're doing.