为什么客户端websocket关闭代码与服务器代码不匹配?

为什么客户端websocket关闭代码与服务器代码不匹配?,websocket,spring-websocket,tyrus,socketrocket,Websocket,Spring Websocket,Tyrus,Socketrocket,我有一个Spring Boot Tomcat服务器,该服务器正在处理来自客户端的websocket连接,这些客户端正在使用: 短袜 泰勒斯 我发现服务器提供的关闭代码通常不是客户端读取的关闭代码 对于SocketRocket,我关闭服务器上的websocket,代码为1000,客户端通常读取1001 对于Tyrus,我关闭代码为1011的websocket,客户端读取1006或1011 关闭代码的说明来自: 1000表示正常关闭,这意味着 已经完成了建立连接的步骤 1001表示端点正在“离开”,

我有一个Spring Boot Tomcat服务器,该服务器正在处理来自客户端的websocket连接,这些客户端正在使用:

  • 短袜
  • 泰勒斯
  • 我发现服务器提供的关闭代码通常不是客户端读取的关闭代码

    对于SocketRocket,我关闭服务器上的websocket,代码为1000,客户端通常读取1001

    对于Tyrus,我关闭代码为1011的websocket,客户端读取1006或1011

    关闭代码的说明来自:

    1000表示正常关闭,这意味着 已经完成了建立连接的步骤

    1001表示端点正在“离开”,例如服务器 向下移动或浏览器离开页面

    1006是保留值,不能设置为 通过端点关闭控制框。它被指定用于 应用程序希望状态代码指示 连接异常关闭,例如,未发送或 接收闭合控制帧

    1011表示服务器正在终止连接,因为 它遇到了一个意外情况,使其无法运行 满足要求

    我已经在服务器上使用Wireshark验证了传出的关闭代码


    close代码作为将信息从服务器传递到客户端的一种手段是否不可靠?在关闭WebSocket之前,我是否需要在应用程序层实现传递这些信息的东西

    这只是猜测,但您列出的WebSocket客户端可能无法正确实现结束握手

    你为什么不试试看发生了什么事?库的侦听器接口()的方法定义如下

    void onDisconnected(
            WebSocket websocket,
            WebSocketFrame serverCloseFrame,
            WebSocketFrame clientCloseFrame,
            boolean closedByServer);
    
    第二个参数
    serverCloseFrame
    是服务器发送给客户端的关闭帧,第三个参数
    clientCloseFrame
    是客户端发送给服务器的关闭帧。在正常情况下,根据规范要求,两个闭合框架的有效载荷相同