2016-07-29 63 views
0

我使用Socket.io在手机和网页之间进行一些通信,并且我遇到了服务器不断丢失连接的问题。我看到很多其他人发布了关于Socket.io的连接,其中的连接在空闲大约5分钟左右后下降,但是这是一种连接,具有不断的信息来回发送,而且我已经能够保持连接约30秒。使用Socket.io,连接不断下降

服务器端代码我跑的是:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

io.on('connection', function(socket){ 

    socket.on('create', function (room) { 
     socket.join(room); 
    }); 

    socket.on('player-move', function(msg){ 
     roomId = msg['room']; 
     move = msg['action']; 
     socket.broadcast.to(roomId).emit('player-move', move); 
    }); 

    socket.on('disconnect', function() { 
     console.log('someone has disconnected'); 
    }); 

}); 

http.listen(443, function(){ 
    console.log('listening on *:443'); 
}); 

的客户端是非常基本的发出事件。这里有一个例子:

$("#arrow-left").on("touchstart", function(){ 
    var senddata = { "room": roomId, "action": "d-l" }; 
    socket.emit("player-move", senddata); 
}); 

一切似乎都运行良好,直到一切开始后5-30秒,然后连接刚刚下降。连接通常会再次启动,但5-10秒后。有没有人有类似的问题发生?这可能是服务器而不是代码的问题吗?我之前在使用Socket.io的不同服务器上做过类似的事情,并没有遇到这种连接问题。任何帮助或方向进去,将不胜感激。谢谢!

+0

你的服务器的'var'声明在哪里? 'roomId =','move ='会在全局范围内以非严格模式定义这些变量,并且会严格地以严格模式崩溃你的服务器。客户在哪里获得'roomId'?如果它是未定义的,也可能会导致服务器崩溃,因为你基本上是在告诉服务器运行'socket.broadcast.to(undefined).emit(...);' –

+0

客户端和服务器之间是否有任何基础架构可能会计时out socket?你确定你的服务器不断运行,而不是重新启动吗? – jfriend00

+0

你确定他们正在断开吗?连接也可能回退到长轮询,而不是持续连接,这可能由于各种原因而发生,并且可能看起来像没有连接。 – pay

回答

0

我与另一个库ws有同样的问题,我试图通过删除客户端数组发送断开连接请求的特定客户端正确处理断开方法。我不完全知道如何,但它解决了我的问题。

clients = [] 

io.on('connection', function(socket){ 
    clients.push(socket); 

    // above methods 

    socket.on('disconnect', function(){ 
     console.log("disconnected"); 
     deleteFromArray(clients, socket.id); 

    }); 
}); 

function deleteFromArray(arr, element) { 
    position = arr.indexOf(element); 
    arr.splice(position, 1); 
}