【问题标题】:socket.io web client: no error event on lost connection with the server?socket.io Web 客户端:与服务器失去连接时没有错误事件?
【发布时间】:2021-03-03 00:41:46
【问题描述】:

当我在客户端网页成功连接(并与 socketio 服务器交换消息)后故意停止我的 socketio 服务器时,

我在 javascript 中没有收到任何 reconnect_errorerror 事件。

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", () =&gt; console.log("IO connection lost!"))我猜你的问题不是来自你发布的代码行,而是来自其他地方,比如你什么时候初始化你的套接字,例如

标签: javascript events browser https socket.io


【解决方案1】:

好消息

似乎没有检测到错误是一个socket.io错误!现在在 v. 3.0.5 中修复:https://github.com/socketio/socket.io/blob/master/CHANGELOG.md

现在,抓住connect_error

socket.on('connect_error', (error) => {
  console.log('socketio Connection error: ' + error)
})

正如预期的那样,我收到了一个错误 (socketio Connection error: Error: xhr poll error)!

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多