node.js + socket.IO – 套接字不重新连接?

我知道socket.io有一个内置的function,重新连接和一切,但我不认为这是工作 – 正如我从别人看到它也没有为他们工作。

如果用户把他们的计算机hibernate,它会断开连接,然后当他们打开备份时,他们不再连接,所以他们没有任何通知或任何东西,直到他们刷新页面。 也许这只是我做得不对的事情?

var io = require('socket.io').listen(8080); var users = {}; ////////////////USER CONNECTED///// console.log("Sever is now running"); io.sockets.on('connection', function (socket) { //Tell the client that they are connected socket.emit('connected'); //Once the users session is recieved socket.on('session', function (session) { //Add users to users variable users[socket.id] = {userID:session, socketID:socket}; //When user disconnects socket.on('disconnect', function () { //socket.socket.connect(); var count= 0; for(var key in users){ if(users[key].userID==session)++count; if(count== 2) break; } if(count== 1){ socket.broadcast.emit('disconnect', { data : session}); } //Remove users session id from users variable delete users[socket.id]; }); socket.on('error', function (err) { //socket.socket.connect(); }); 

socket.emit("connection")需要在用户重新连接时调用,或者至less需要调用该事件中发生的事件。

另外socket.socket.connect(); 不起作用,它返回一个错误,并closures套接字服务器,并出现“连接不存在”错误。

这个问题与io.connect params有关。

看看这个客户端代码(它将尝试永远重新连接,尝试3秒之间的最大延迟):

  ioParams = {'reconnection limit': 3000, 'max reconnection attempts': Number.MAX_VALUE, 'connect timeout':7000} socketAddress = null socket = io.connect(socketAddress, ioParams) 

有两个重要的参数,与您的问题有关:

  • 重新连接限制 – 限制重新连接尝试之间的延迟时间。 通常服务器停机时间越来越大
  • 最大重新连接尝试次数 – 您想尝试多less次。 默认值是10.在大多数情况下,这是客户端停止尝试的问题。