【发布时间】:2015-12-08 02:39:17
【问题描述】:
我有一个 Spring Boot Tomcat 服务器,它正在处理来自正在使用的客户端的 websocket 连接:
- SocketRocket
- 泰鲁斯
我发现服务端提供的关闭码往往不是客户端读取的关闭码。
对于SocketRocket,我在服务端关闭websocket,代码1000,客户端经常读到1001。
对于 Tyrus,我使用代码 1011 关闭 websocket,客户端读取 1006 或 1011。
来自RFC 6455的关闭代码说明:
1000 表示正常关闭,意思是 已建立连接。
1001 表示某个端点正在“离开”,例如服务器 关闭或浏览器已离开页面。
1006 是保留值,不得将其设置为状态码 通过端点关闭控制框。它被指定用于 应用程序需要一个状态代码来表明 连接被异常关闭,例如,没有发送或 接收关闭控制框架。
1011 表示服务器正在终止连接,因为 它遇到了阻止它的意外情况 满足请求。
我已在服务器上使用 Wireshark 验证了发出的关闭代码。
作为将信息从服务器传递到客户端的一种方式,关闭代码是否不可靠?在关闭 websocket 之前,我是否需要在应用层实现一些传递这些信息的东西?
【问题讨论】:
标签: websocket spring-websocket tyrus socketrocket