正常关闭连接
- 当客户端或服务器端主动调用
close()
方法时,会触发close事件。例如,在客户端代码中,当用户完成操作或不需要再与服务器保持连接时,可以显式地调用socket.close()
来关闭WebSocket连接。此时,连接会正常关闭,并且双方都会触发close事件,以通知各自的应用程序连接已终止。// 客户端主动关闭连接 socket.close(1000, 'Connection closed by client');
- 在服务器端,也可以根据业务逻辑主动关闭与某个客户端的连接,同样会导致客户端和服务器端的close事件被触发。
连接异常中断
- 如果网络出现故障、服务器端意外崩溃或客户端失去网络连接等异常情况导致连接中断,WebSocket会自动检测到连接的丢失,并触发close事件。在这种情况下,close事件的
code
属性通常会被设置为一个非1000的状态码,以表示连接是非正常关闭的。 - 例如,当服务器突然宕机时,客户端的WebSocket连接会因为无法与服务器通信而中断,此时客户端会收到一个close事件,
code
属性可能会是类似于1006这样表示连接异常关闭的值,并且reason
属性可能会包含一些与错误相关的信息,但具体内容因浏览器和实现而异。
协议错误
- 当WebSocket连接过程中发生协议级别的错误时,也会触发close事件。例如,如果客户端发送的数据格式不符合WebSocket协议的要求,或者服务器端对协议的处理出现错误,都可能导致连接被关闭并触发close事件。
- 这种情况下,close事件的
code
属性会根据具体的协议错误类型被设置为相应的值,以便客户端和服务器端能够识别错误原因。常见的协议错误码包括1002(表示协议错误)、1007(表示数据类型错误)等。
服务器端主动拒绝连接
- 在某些情况下,服务器端可能会因为安全限制、资源不足或其他原因拒绝客户端的连接请求。当服务器端拒绝连接时,客户端会立即收到一个close事件,其
code
属性通常会被设置为一个特定的值,如1008(表示被服务器拒绝连接),以告知客户端连接请求未被接受。
连接超时
- 如果WebSocket连接在一段时间内没有任何数据交互,并且超过了服务器或客户端设置的超时时间,连接可能会被自动关闭,从而触发close事件。这种机制有助于释放服务器资源和减少无效连接的占用。
总之,close事件的触发涵盖了从正常的连接关闭到各种异常情况导致的连接中断等多种场景。通过监听close事件,开发人员可以在连接关闭时进行相应的处理,如清理资源、更新界面状态或尝试重新连接等,以确保应用程序的稳定性和良好的用户体验。