我有一个 Spring Boot Tomcat 服务器,它正在处理来自正在使用的客户端的 websocket 连接:
- 套接字火箭
- 泰鲁斯
我发现服务器提供的关闭代码往往不是客户端读取的关闭代码。
对于SocketRocket,我在服务端关闭websocket,代码1000,客户端经常读取1001。
对于 Tyrus,我使用代码 1011 关闭 websocket,客户端读取 1006 或 1011。
来自RFC 6455的关闭代码的描述:
1000表示正常关闭,表示建立连接的目的已经实现。
1001 表示端点正在“离开”,例如服务器关闭或浏览器已离开页面。
1006 是保留值,绝不能在端点关闭控制帧中设置为状态码。它被指定用于期望状态代码指示连接已异常关闭的应用程序,例如,没有发送或接收关闭控制帧。
1011 表示服务器正在终止连接,因为它遇到了阻止它完成请求的意外情况。
我已经在服务器上使用 Wireshark 验证了传出的关闭代码。
作为将信息从服务器传递到客户端的一种方式,关闭代码是否不可靠?在关闭 websocket 之前,我是否需要在应用层实现一些传递这些信息的东西?