Socket.IO故障检测

时间:2012-10-11 08:20:38

标签: node.js socket.io

如果node.js服务器和客户端之间的链接断开,并且挂起事件尚未被超时触发,是否有任何方法可以检测客户端发出的特定事件是否无法由Socket.IO传送到服务器端?

1 个答案:

答案 0 :(得分:1)

我对此深入研究,因为我不是socket.io或node.js的专家。

  1. 哪种类型的插座?
  2. sockets.io摘要用于连接服务器的方法,具体取决于浏览器功能。默认是使用WebSockets(HTML5)。

    然而,服务器端的sockets.io附加到node.js的web服务器,因此它将始终使用TCP,因为这是HTTP运行的。因此,无论客户端使用哪种方法,它都将始终使用TCP。所以你不必担心UDP套接字。

    1. 是socket.io emit errors?
    2. 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()发出了哪些事件。错误也应该触发断开连接,重新连接序列,但是'close'不会触发,直到它绝对关闭(它看起来对我来说)可能需要一些时间。但看起来error应立即触发。

      1. 否则我有两个想法:
        一个。使用node.js socket.setTimeOut来设置更短的超时,看看会发生什么, 湾或尝试通过某种方式强制插槽上的错误,即在读取循环中读取(由于您可能使用非阻塞套接字而必须具有这种读取),尝试写入套接字。