WebSocket连接关闭时,主要会触发两个事件:
close事件
- 触发时机:当WebSocket连接正常关闭或因各种原因异常关闭时,都会触发
close
事件。例如,客户端或服务器端主动调用close()
方法结束连接,或者由于网络故障、服务器崩溃等导致连接中断,都会引发该事件。 - 事件对象属性:
close
事件的事件对象包含一些有用的属性,用于提供关于连接关闭的详细信息。其中,code
属性表示关闭连接的状态码,不同的状态码对应着不同的关闭原因。常见的状态码包括:1000
:表示正常关闭,这是最常见的情况,通常是客户端或服务器端主动调用close()
方法正常结束连接。1001
:表示端点离开,例如用户关闭了浏览器窗口或离开了当前页面,导致WebSocket连接被关闭。1006
:表示连接异常关闭,通常是由于底层网络连接丢失、服务器意外关闭等原因导致的非预期关闭情况。1011
:表示服务器出现内部错误,导致无法继续处理WebSocket连接,从而关闭连接。reason
属性则是一个可选的字符串,用于提供更详细的关闭原因说明。
- 示例:
socket.addEventListener('close', function(event) {
console.log('WebSocket connection closed:', event.code, event.reason);
// 根据不同的状态码和原因进行相应的处理
if (event.code === 1000) {
console.log('Connection closed normally.');
} else {
console.log('Connection closed abnormally:', event.reason);
}
});
onerror事件
- 触发时机:虽然
onerror
事件主要是在WebSocket连接过程中发生错误时触发,但在某些情况下,连接关闭也可能会导致onerror
事件被触发。例如,当连接因网络错误而关闭时,浏览器可能会将这种情况视为一种错误,并触发onerror
事件,以便开发者能够捕获并处理相关的错误信息。 - 事件对象属性:
onerror
事件的事件对象包含一个error
属性,该属性指向一个Error
对象,提供了关于所发生错误的详细信息,如错误消息、错误类型等。通过检查error
对象的属性,可以获取更多关于连接关闭原因的线索,特别是在close
事件的信息不够详细或无法明确判断关闭原因时,onerror
事件中的错误信息可能会有助于进一步排查问题。 - 示例:
socket.addEventListener('error', function(event) {
console.error('WebSocket error:', event.error);
// 根据错误信息进行相应的处理,如记录错误、尝试重新连接等
});
综上所述,WebSocket连接关闭时通常会触发close
事件,而在某些特定情况下也可能会触发onerror
事件。通过监听这两个事件,开发者可以在连接关闭时进行相应的处理,如清理资源、更新界面状态、尝试重新连接等,以确保应用程序的稳定性和良好的用户体验。