我知道socket.io有一个用于重新连接和内容的内置功能,但我认为它不起作用 - 正如我从其他人那里看到的那样,它也不适用于它们。
如果用户将其计算机置于休眠状态,则会断开它们,然后当他们将其打开时,它们将不再连接,因此在刷新页面之前,它们不会发送任何通知或任何内容。也许这只是我做得不对的事情?
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")
,或者至少需要调用该事件中发生的事件。
同样socket.socket.connect();
不起作用,它返回错误并关闭套接字服务器,错误为“连接不存在”。
答案 0 :(得分:4)
问题与io.connect参数有关。
查看此客户端代码(它将尝试永久重新连接,尝试之间的最大延迟为3秒):
ioParams = {'reconnection limit': 3000, 'max reconnection attempts': Number.MAX_VALUE, 'connect timeout':7000}
socketAddress = null
socket = io.connect(socketAddress, ioParams)
有两个与您的问题相关的重要参数: