我有一个处理websocket连接的Spring Boot Tomcat服务器,它接收以下客户端使用的连接:
- SocketRocket
- Tyrus
我发现服务器提供的关闭代码通常与客户端读取的关闭代码不一致。
对于SocketRocket,我在服务器上使用1000代码关闭websocket,而客户端经常读取1001。
对于Tyrus,我使用1011代码关闭websocket,而客户端读取的是1006或1011。
来自RFC 6455的关闭代码说明:
1000表示正常关闭,意味着建立连接的目的已经实现。
1001表示一个端点“正在离开”,例如服务器关闭或浏览器导航离开页面。
1006是保留值,绝不能由端点在一个Close控制帧中设置为状态码。这是指定用于应用程序期望状态码以指示连接异常关闭(例如,在没有发送或接收Close控制帧的情况下)。
1011表示服务器正在终止连接,因为遇到了阻止其满足请求的意外条件。
我已经通过Wireshark在服务器上验证了传出的关闭代码。
关闭代码只是作为从服务器传递信息到客户端的一种不可靠的方式吗?我需要在应用程序层实现传递该信息的功能,然后再关闭websocket吗?