前端用 websocket 写入数据到后端 netty 时,丢数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huskyui
V2EX    Java

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

  •  
  •   huskyui 2023-10-31 18:35:13 +08:00 1836 次点击
    这是一个创建于 776 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大致流程

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

    问题

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

    10 条回复    2023-11-01 18:57:13 +08:00
    kilasuelika
        1
    kilasuelika  
       2023-10-31 18:42:17 +08:00 via Android
    要看后端用的什么 websocket 库,有些可能有默认的大小限制
    huskyui
        2
    huskyui  
    OP
       2023-10-31 20:26:37 +08:00
    @kilasuelika 用的是 netty 实现的 websocket
    huskyui
        3
    huskyui  
    OP
       2023-10-31 22:35:02 +08:00
    大概找到原因了,大文件传输时,刚刚抓包发现,报了个错,TCP WINDOW FULL
    kuanat
        4
    kuanat  
       2023-11-01 02:39:50 +08:00
    看到 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  
       2023-11-01 12:04:31 +08:00
    @huskyui 首先你用 websocket 就不该关注 TCP 的相关信息吧
    huskyui
        6
    huskyui  
    OP
       2023-11-01 17:44:50 +08:00
    @kuanat 昨天用 wireshark 看的时候,我看里面的 length 缺失了。netty 里面我确实设置
    huskyui
        7
    huskyui  
    OP
       2023-11-01 17:47:02 +08:00
    @julyclyde 问了 chatgpt,和通义千问,没找到大致原因。只能死马当活马医
    julyclyde
        8
    julyclyde  
       2023-11-01 18:04:23 +08:00
    你这个所谓“丢失了”是指没收到中间这一段 130k 但是收到 130k 之后的内容吗?
    还是从 130k 开始往后全都丢失了?
    huskyui
        9
    huskyui  
    OP
       2023-11-01 18:42:59 +08:00
    @julyclyde 我 netty 那边打断点,只收到了前面 130k 数据
    julyclyde
        10
    julyclyde  
       2023-11-01 18:57:13 +08:00
    @huskyui 把 netty 换掉试试呢?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3602 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 164ms UTC 10:29 PVG 18:29 LAX 02:29 JFK 05:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86