如何在Socket.IO中模拟连接失败

时间:2011-08-29 09:32:41

标签: javascript socket.io

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

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

所以这就是问题:如何模拟连接失败并强制Socket.IO重新连接?

2 个答案:

答案 0 :(得分:0)

Socket.io为您提供套接字对象中的活动。实际上,您可以通过阅读API找到各种工具。

请参阅stackoverflow上的此示例 Socket.IO handling disconnect event

答案 1 :(得分:-1)

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

客户方:

// 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);   
  });
});

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

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