node.js - Socket.IO故障检测

标签 node.js socket.io

如果 Node.js 服务器和客户端之间的链接断开,并且断开连接事件尚未因超时而触发,是否有任何方法可以检测客户端发出的特定事件是否无法执行通过Socket.IO传递到服务器端?

最佳答案

我对此进行了更深入的研究,因为我不是 socket.io 或 node.js 方面的专家。

  1. 哪种类型的套接字?

sockets.io 根据浏览器功能抽象它使用哪种方法连接到服务器。默认使用 WebSockets (HTML5)。

然而,服务器端的sockets.io 连接到node.js 的网络服务器,因此它将始终使用TCP,因为HTTP 就是在TCP 上运行的。因此,无论客户端使用哪种方法,底层都将始终使用 TCP。因此您无需担心 UDP 套接字。

  1. socket.io 是否发出错误?

TCP 理论上会检查每个数据包是否到达,因此 TCP 应该将连接错误冒泡到 socket.io 库。所以你可以尝试这样的事情:

<script>
  var socket = io.connect('http://localhost/');

  socket.on('error', function (message) { 
    alert( 'error in transport: ' + message );
  });

顺便说一句,我自己没有尝试过这个,但是我读了socket.io.js的代码(你应该通过浏览器找到它,因为它是由socket.io根据传输的配置动态创建的,看起来对我来说)看到使用publish()发出了哪些事件。错误还应该触发断开连接、重新连接序列,但“关闭”不会触发,直到其完全关闭(在我看来),这可能需要一些时间。但看起来错误应该立即触发。

  1. 否则我有两个想法:
    A。使用node.js socket.setTimeOut 设置更短的超时,看看会发生什么, b.或者尝试通过某种方式强制套接字上的错误,即在读取循环中的读取之间(您必须这样做,因为您可能使用非阻塞套接字),尝试写入套接字。

关于node.js - Socket.IO故障检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12835171/

相关文章:

javascript - 如何在 NW.js 的服务页面中运行脚本?

node.js - 如何在aws api网关中传递和访问路径参数

swift - Swift 中的输入指示器

node.js - 如何使Electron和Socket.io应用程序在瘦客户端体系结构中运行?

arrays - 为什么我的状态数组重置为空?

node.js - Google 结果显示 Meteor.js 网站为 "Loading..."

javascript - 使用 Promise.all(),其中个人 promise 出错时重试

javascript - 使用 webpack 将 dist 复制到 libs 目录

javascript - 使用绘图管理器在谷歌地图上绘制时获取矩形/多边形的坐标

android - 指定Android客户端的Socket事件