简体   繁体   English

socket.io Web 客户端:与服务器的连接丢失时没有错误事件?

[英]socket.io web client: no error event on lost connection with the server?

When I intentionally stop my socketio server after my client web page is successfully connected (and exchanged messages with the socketio server),当我在客户端网页成功连接(并与 socketio 服务器交换消息)后故意停止我的 socketio 服务器时,

I'm NOT getting any reconnect_error or error event in javascript.我在 javascript 中没有收到任何reconnect_errorerror事件。

The "send xhr" in socket.io fails and the browser console trace a sequence of errors like this: socket.io 中的“send xhr”失败,浏览器控制台会跟踪如下一系列错误:

GET https://xxx.xxx.xxx.xxx:8443/socket.io/?EIO=4&transport=polling&t=NNX9dim net::ERR_CONNECTION_REFUSED polling-xhr.js:203 //

The client browser code foresee error event handlers:客户端浏览器代码预见错误事件处理程序:

// 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>

But there is no event generated.但是没有生成事件。

Is this what is supposed to happen?这是应该发生的事情吗? Why there is not event generated?为什么没有生成事件?

I'm running last socket.io release (3.0.2) with default options and brave (Chrome 86 on Windows 10) browser.我正在使用默认选项和勇敢的(Windows 10 上的 Chrome 86)浏览器运行最新的 socket.io 版本(3.0.2)。

BTW, my issue is like the very old (8 years ago): https://groups.google.com/g/socket_io/c/7BynuejEmts顺便说一句,我的问题很老(8 年前): https : //groups.google.com/g/socket_io/c/7BynuejEmts

Seems weird to me that is not yet fixed.对我来说似乎很奇怪,尚未修复。 Any idea?任何的想法?


UPDATED更新

I re-wrote the error handlers (double checking version 3 event names: https://socket.io/docs/v3/client-api/index.html ), se the cient.js code updated.我重新编写了错误处理程序(仔细检查第 3 版事件名称: https ://socket.io/docs/v3/client-api/index.html),更新了 cient.js 代码。

Now, if I kill the socketio server, I finally got a disconnect event!现在,如果我杀死 socketio 服务器,我终于得到了disconnect事件!

socketio disconnect reason transport close

That's the expected behavior.这是预期的行为。

NOTE笔记

The disconnect socketio event is generated ONCE. disconnect socketio 事件生成一次。

If the server remains down, the client doesn't raise an expected reconnect_attempt event.如果服务器保持关闭,客户端不会引发预期的reconnect_attempt事件。 Still weird for me.对我来说还是很奇怪。 Last minor related point, I still do not get the ping event.最后一个小相关点,我仍然没有得到ping事件。

thanks giorgio谢谢乔治

Good news好消息

it seems that the not detection of error was a socket.io bug!似乎未检测到错误是 socket.io 错误! Now fixed in v. 3.0.5: https://github.com/socketio/socket.io/blob/master/CHANGELOG.md现在在 v. 3.0.5 中修复: https : //github.com/socketio/socket.io/blob/master/CHANGELOG.md

Now, catching connect_error :现在,捕获connect_error

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM