Websocket 报错 1002 有大佬遇到过吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cavendish0
V2EX    程序员

Websocket 报错 1002 有大佬遇到过吗?

  •  
  •   cavendish0 2020-09-01 14:11:35 +08:00 5156 次点击
    这是一个创建于 1943 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如图: https://imgchr.com/i/dvyD6U

    我是开发安卓终端的,对方开了个 ws 服务器,我连接他有时会断开报错,Protocol error 1002 。查了下,是协议错误,但是具体啥错误也没指出了。

    大佬们帮忙看看

    9 条回复    2020-09-03 00:43:16 +08:00
    Githuboy
        1
    Githuboy  
       2020-09-01 16:36:34 +08:00
    咨询是不是对方 ws 服务器内部错误.
    jindeq
        2
    jindeq  
       2020-09-01 18:51:29 +08:00 via Android
    不要信任第三方服务,对接无数家第三方遇到过没部署服务,服务没启动,服务挂了,服务代码各种 bug,业务有问题,对方开发静默修改接口各种问题……
    cavendish0
        3
    cavendish0  
    OP
       2020-09-02 08:17:02 +08:00
    @jindeq 没办法,对方就是我们的客户。现在客户在重要汇报过程出现问题,就是上面的报错,然后我们被狠批了,所以我想知道到底是哪里的锅
    cavendish0
        4
    cavendish0  
    OP
       2020-09-02 08:18:00 +08:00
    @Githuboy 对方也是不清楚,他们服务器程序是 springboot 写的,说 ws 逻辑那一段是网上抄来的,我也是醉了
    stach
        5
    stach  
       2020-09-02 11:37:06 +08:00
    看看抓包截图里面, 第一个 websocket 报文是什么
    cavendish0
        6
    cavendish0  
    OP
       2020-09-02 13:32:03 +08:00
    @stach 是一个空包。服务器发过来的
    如图 https://s1.ax1x.com/2020/09/02/wSQIh9.png

    很奇怪,我们客户端连上去,成功之后他就会发一个空包下来,一般情况下是没用问题的,我们也没处理
    stach
        7
    stach  
       2020-09-02 14:20:08 +08:00
    @cavendish0 目前的过程大致是:
    - 1. websocket 连接建立成功了
    - 2. 服务端在成功后, 马上给客户端发送了一个`文本报文`的空包
    - 3. 客户端收到空包, 没有做任何响应
    - 4. 服务端可能认定客户端异常, 主动发送`close`包, 表示断开 websocket 连接

    因此分析一下:
    - 服务端的问题:
    - 确认一下 2 中的空包, 是否有给到协议文档. 比如, 服务端将该空包定义为 "心跳包", 需要客户端回应一个 "心跳包"
    - 客户端的问题:
    - 如果确实服务端有要求需要响应`空包`, 如何响应, 符合服务端的要求(极有可能也是一个空包)
    - 如果服务端没有给协议, 回应"心跳包"也还是有报错, 试试其他第三方的 websocket 服务, 确保客户端代码是 OK 的, 然后将 bug 反馈给你的客户.
    cavendish0
        8
    cavendish0  
    OP
       2020-09-02 15:04:29 +08:00
    @stach 感谢大佬帮助。

    协议文档上我们并没有规定空包为心跳包,我们目前有 100 多台终端都连到他的 ws 服务器,全都是没用回应空包的。我极度怀疑是服务器程序的问题。

    我找到客户,拿到了报错的日志,就是在这个报错之后,客户端 ws 就会断开,然后不断重连:

    16:07:29.445 [http-nio-8082-exec-8] ERROR c.g.l.s.WebSocketServer - [onError,78] - 发生错误
    java.io.EOFException
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1208)
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1142)
    at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:72)
    at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:171)
    at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:151)
    at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148)
    at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
    16:07:29.445 [http-nio-8082-exec-8] INFO c.g.l.s.WebSocketServer - [onClose,58] - 连接 3110-440600-201112-0049 关闭!当前在线人数为 88

    帮忙分析一些
    感谢大佬耐心解答
    stach
        9
    stach  
       2020-09-03 00:43:16 +08:00
    @cavendish0
    从服务端的日志来看, 无疑是服务端报错了, 才导致的主动关闭连接。
    (和心跳包没有关系, 虽然这个空包很诡异)

    1. 让服务端排查一下网关,比如 Nginx, 看看 websocket 配置的 proxy_read_timeout 是多少秒, 网络差的情况下是否会超时, 从而导致上述问题

    2. 让服务端发一下 onError,onClose,两个方法的代码截图, 排查一下是否有 Bug
    (这两个方法,不会涉及什么公司机密)

    3. 如果还是没有解决, 让服务端排查一下 websocket 授权的 session 管理是否出错, 导致用户新建连接和老连接的切换出错, 导致反复重连

    PS:
    猜测最可能是第 1 点问题, 可以依次排查, 你只要配合就好了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2823 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 06:15 PVG 14:15 LAX 22:15 JFK 01:15
    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