【问题标题】:How to simulate a connection failure in Socket.IO如何在 Socket.IO 中模拟连接失败
【发布时间】:2011-11-05 21:39:26
【问题描述】:

我正在开发一个应用程序,其中客户端通过 Socket.io 连接到 nodejs 服务器并订阅各种事件。这些订阅相当复杂,无法使用 Socket.IO 的频道功能处理。

这意味着客户端需要跟踪其订阅,并且在断开连接时可能必须重新订阅。不幸的是,我不太确定 Socket.IO 是如何处理重新连接的,以及这对客户端来说到底有多透明。

那么问题来了:如何模拟连接失败并强制 Socket.IO 重新连接?

【问题讨论】:

  • 拔下网线重新插上?
  • 或者可能只是删除任何一方的连接而不关闭它,然后看看另一方的反应。
  • @xavierm02:这可行,但确实不是您想在单元测试中使用的那种方法 :-) 我如何“删除”连接?
  • 你应该有某种 API 来创建一个对象。并且该对象必须以某种方式具有 close 方法。 Truc 在不使用该 close 方法的情况下删除对象,也许您会遇到错误。如果一方面有错误,那么另一方面会得到你需要的错误。
  • 不,我没有关闭方法,因为连接不打算关闭。即使我这样做了,我也需要在 Socket.IO 级别上进行模拟,因为我希望 Socket.IO 自动重新连接。

标签: javascript socket.io


【解决方案1】:

Socket.io 在您的 socket 对象 中为您提供事件。实际上,您可以通过阅读他们的 API 找到各种工具。

在stackoverflow上查看这个例子 Socket.IO handling disconnect event

【讨论】:

    【解决方案2】:

    根据我的经验,我发现这是最简单和有用的解决方案:

    客户端:

    // the next 3 functions will be fired automatically on a disconnect.
    // the disconnect (the first function) is not required, but you know, 
    // you can use it make some other good stuff.
    
    socket.on("disconnect", function() {
      console.log("Disconnected");
    });
    
    socket.on("reconnect", function() {
      // do not rejoin from here, since the socket.id token and/or rooms are still
      // not available.
      console.log("Reconnecting");
    });
    
    socket.on("connect", function() {
      // thats the key line, now register to the room you want.
      // info about the required rooms (if its not as simple as my 
      // example) could easily be reached via a DB connection. It worth it.
      socket.emit("registerToRoom", $scope.user.phone);
    });
    

    服务器端:

    io.on('connection', function(socket){
      socket.on("registerToRoom", function(userPhone) {   
        socket.join(userPhone);   
      });
    });
    

    就是这样。非常简单直接。

    您还可以在连接的套接字(最后一个函数)中为用户显示添加更多更新,例如刷新其索引或其他内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多