【发布时间】:2021-03-03 00:41:46
【问题描述】:
当我在客户端网页成功连接(并与 socketio 服务器交换消息)后故意停止我的 socketio 服务器时,
我在 javascript 中没有收到任何 reconnect_error 或 error 事件。
socket.io 中的“发送 xhr”失败,浏览器控制台跟踪如下一系列错误:
GET https://xxx.xxx.xxx.xxx:8443/socket.io/?EIO=4&transport=polling&t=NNX9dim net::ERR_CONNECTION_REFUSED polling-xhr.js:203 //
客户端浏览器代码预见错误事件处理程序:
// index.js
var socket = io()
// ...
// ...
// socketio error handlers
// https://socket.io/docs/v3/client-api/index.html
socket.on('connect', () => {
console.log('socketio Connection successful')
})
socket.on('ping', () => {
console.log('socketio ping from server')
})
socket.on('disconnect', (reason) => {
console.log('socketio disconnect reason ' + reason)
})
socket.on('connect_error', (error) => {
console.log('socketio Connection error: ' + error)
})
socket.on('reconnect', (number) => {
console.log('socketio reconnect attempt ' + number)
})
socket.on('reconnect_attempt', (number) => {
console.log('socketio reconnect attempt ' + number)
})
socket.on('reconnect_failed', () => {
console.log('socketio Connection Failed')
})
socket.on('reconnect_error', (error) => {
console.log('socketio Connection error: ' + error)
})
socket.on('error', (error) => {
console.log('socketio error : ' + error)
})
<!-- index.html -->
<head>
<meta charset = "UTF-8">
<title>...</title>
<link href="index.css" rel="stylesheet">
<link rel="shortcut icon" href="#">
</head>
<body>
<!-- ... -->
<script src="/socket.io/socket.io.js"></script>
<script type="module" src="index.js"></script>
</body>
但是没有生成事件。
这是应该发生的事情吗?为什么没有生成事件?
我正在使用默认选项和勇敢的(Windows 10 上的 Chrome 86)浏览器运行上一个 socket.io 版本 (3.0.2)。
顺便说一句,我的问题很老了(8 年前):https://groups.google.com/g/socket_io/c/7BynuejEmts
对我来说似乎很奇怪,尚未修复。有什么想法吗?
更新
我重新编写了错误处理程序(仔细检查版本 3 事件名称:https://socket.io/docs/v3/client-api/index.html),更新了 cient.js 代码。
现在,如果我杀死 socketio 服务器,我终于得到了一个disconnect 事件!
socketio disconnect reason transport close
这是预期的行为。
注意
disconnect socketio 事件仅生成一次。
如果服务器仍然关闭,客户端不会引发预期的reconnect_attempt 事件。对我来说还是很奇怪。最后一个小相关点,我还是没有得到ping事件。
谢谢 乔治
【问题讨论】:
-
很奇怪,我在我当前的一个项目中有这个代码,它就像一个魅力:
socket.on("disconnect", () => console.log("IO connection lost!"))我猜你的问题不是来自你发布的代码行,而是来自其他地方,比如你什么时候初始化你的套接字,例如
标签: javascript events browser https socket.io